Kesamaan Nombor Rentetan PHP yang Mengejutkan: Meneroka Anomali '0 == "e"'
Dalam PHP, perbandingan yang kelihatan tidak berbahaya boleh menghasilkan hasil yang tidak dijangka, seperti yang ditunjukkan dalam coretan kod di bawah:
$item['price'] = 0; if ($item['price'] == 'e') { $item['price'] = -1; }
Walaupun memulakan $item['price'] kepada 0, keadaan if secara tidak jelas dinilai kepada benar apabila 'e' ditugaskan kepada harga, menganggap 0 sebagai bersamaan dengan rentetan 'e' .
Pendedahan: Jenis Casting dan PHP == Operator
Penyebabnya terletak pada operator == PHP, yang cuba menghantar operan kepada jenis yang sama sebelum melakukan perbandingan. Dalam kes ini, ia membuang integer 0 kepada rentetan. Memandangkan 'e' bukan integer yang sah, ia menjadi 0, menghasilkan padanan palsu.
Penyelesaian: Menerima Perbandingan Tegas
Untuk mengelakkan anomali seperti itu, ia adalah dinasihatkan untuk menggunakan operator === dan bukannya ==. === melakukan perbandingan ketat yang tidak melibatkan paksaan jenis, memastikan bahawa hanya nilai jenis yang sama dianggap sama.
Anjakan Menukar Permainan PHP 8
Dalam perubahan ketara daripada versi sebelumnya, PHP 8 memperkenalkan tingkah laku yang diubah suai untuk perbandingan rentetan nombor. Daripada menghantar nombor ke rentetan, PHP 8 menghantar rentetan ke nombor apabila boleh. Perubahan ini sejajar dengan jangkaan, memastikan 0 dan 'e' tidak lagi dianggap sama.
Ringkasnya
Pengendali == PHP boleh membawa kepada hasil yang mengejutkan apabila membandingkan rentetan dan nombor kerana tuangan jenis. Untuk mengelakkan tingkah laku yang tidak dijangka, adalah penting untuk menggunakan operator === untuk perbandingan yang ketat. Tambahan pula, pendekatan disemak PHP 8 terhadap perbandingan nombor rentetan meningkatkan ketekalan dan ketepatan kod.
Atas ialah kandungan terperinci Mengapakah PHP `0 == 'e'` Menilai kepada Benar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!