Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Operator `==` PHP Melayan 0 sebagai Sama dengan Rentetan?

Mengapa Operator `==` PHP Melayan 0 sebagai Sama dengan Rentetan?

Patricia Arquette
Patricia Arquetteasal
2024-12-16 01:37:10896semak imbas

Why Does PHP's `==` Operator Treat 0 as Equal to a String?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn