Tafsiran PHP Terhadap Kesaksamaan: Menyingkap Teka-teki '0'
Dalam PHP, operator perbandingan kesamaan == boleh menyebabkan kekeliruan apabila membandingkan integer kepada rentetan. Khususnya, ungkapan 0 == 'e' menilai kepada benar, menimbulkan persoalan tentang logik asas.
Penjelasan terletak pada peraturan pemutus jenis PHP. Apabila membandingkan jenis data yang berbeza, PHP cuba menukar salah satu daripadanya agar sepadan dengan jenis yang lain. Dalam kes 0 == 'e', PHP menghantar rentetan 'e' kepada integer dalam percubaan untuk melakukan perbandingan berangka.
Malangnya, 'e' bukan perwakilan integer yang sah, jadi penukaran gagal dan menghasilkan nilai 0. Ini bermakna ungkapan berkesan menjadi 0 == 0, yang dinilai kepada benar.
Untuk mengelakkan perkara yang tidak dijangka ini tingkah laku, adalah penting untuk menggunakan === dan bukannya == apabila membandingkan nilai pelbagai jenis. Pengendali kesaksamaan yang ketat === melakukan perbandingan ketat jenis, menghalang sebarang paksaan jenis.
Akibatnya, ungkapan 0 === 'e' akan dinilai sebagai palsu, kerana nilai kedua-duanya adalah jenis yang berbeza (integer dan rentetan). Ini lebih tepat menggambarkan jangkaan intuitif bahawa 0 dan 'e' tidak boleh dianggap sama.
PHP 8 memperkenalkan perubahan kepada tingkah laku ini. Apabila membandingkan nombor dengan rentetan, PHP 8 kini menggunakan perbandingan nombor dan bukannya menghantar nombor kepada rentetan dan menjalankan perbandingan rentetan. Akibatnya, ungkapan 0 == 'e' akan dinilai palsu dalam PHP 8 dan versi yang lebih baru.
Kesimpulan:
Memahami peraturan pemutus jenis PHP adalah penting untuk mengelakkan kejutan apabila membandingkan jenis data. Dengan menggunakan === untuk perbandingan ketat jenis, pembangun boleh memastikan bahawa semakan kesaksamaan dilakukan seperti yang dimaksudkan tanpa sebarang penukaran yang tidak dijangka.
Atas ialah kandungan terperinci Mengapa 0 == 'e' Menilai kepada Benar dalam PHP (dan Cara Mengelakkannya)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!