Enigma Anomali Kesamaan PHP Antara 0 dan Rentetan
Dalam PHP, fenomena aneh timbul apabila membandingkan integer 0 dengan rentetan. Untuk memahami tingkah laku yang membingungkan ini, mari kita menyelidiki contoh kod khusus.
Pertimbangkan coretan berikut:
$item['price'] = 0; /* Code to get item information goes in here */ if ($item['price'] == 'e') { $item['price'] = -1; }
Kod ini bertujuan untuk memulakan harga item kepada 0 dan mendapatkan maklumatnya. Jika harga disediakan sebagai 'e', ia harus ditafsirkan sebagai pertukaran dan ditetapkan kepada nilai negatif. Walau bagaimanapun, yang menghairankan, gelung if secara konsisten menilai kepada benar, menganggap 0 sebagai sama dengan 'e'.
Pelaksanaan perbandingan unik PHP menerangkan tingkah laku yang membingungkan ini. Secara lalai, ia menggunakan operator ==, yang melakukan paksaan jenis. Dalam kes ini, integer 0 ditukar kepada rentetan dan dibandingkan dengan 'e'. Oleh kerana 'e' tidak boleh dihuraikan sebagai integer, ia juga menjadi 0, menghasilkan kesamaan yang mencetuskan gelung if.
Untuk memintas anomali ini, adalah penting untuk menggunakan pengendali kesaksamaan yang ketat ===, yang melakukan perbandingan sensitif jenis. Dengan menggunakan ===, anda boleh membandingkan nilai jenis yang sama secara eksplisit, memastikan 0 dan 'e' kekal berbeza.
Dalam PHP 8.0, perubahan ketara telah diperkenalkan dalam pengendalian rentetan ke nombor perbandingan. Dalam versi ini, nombor ditukar kepada rentetan sebelum melakukan perbandingan dengan rentetan. Perubahan ini secara berkesan memecahkan keserasian ke belakang sebelumnya, yang berpotensi menyebabkan isu untuk skrip yang bergantung pada gelagat lama.
Memahami gelagat menarik pengendali kesamaan PHP ini adalah penting untuk mengelakkan hasil yang tidak dijangka apabila membandingkan integer dan rentetan. Dengan memilih operator kesaksamaan yang sesuai dengan teliti, pembangun boleh memastikan logik yang dimaksudkan dijalankan dengan tepat dalam pangkalan kod mereka.
Atas ialah kandungan terperinci Mengapa Operator `==` PHP Melayan 0 sebagai Sama dengan Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!