Memahami Perbandingan Ingin tahu Rentetan dengan Integer
Ramai pengaturcara hairan dengan kelakuan kod PHP berikut:
$test1 = "d85d1d81b25614a3504a3d5601a9cb2e"; $test2 = "3581169b064f71be1630b321d3ca318f"; if ($test1 == 0) echo "Test 1 is Equal!?"; if ($test2 == 0) echo "Test 2 is Equal!?";
Anehnya, kod ini mengeluarkan "Ujian 1 Sama!?" sahaja. Mengapa ini berlaku?
Perbandingan Longgar dan Penukaran Rentetan kepada Nombor
Kunci untuk memahami tingkah laku ini terletak pada mekanisme perbandingan longgar PHP. Apabila membandingkan rentetan kepada integer menggunakan operator ==, PHP cuba menukar rentetan kepada nombor.
Menurut manual PHP, penukaran rentetan kepada nombor mengikut peraturan ini:
Dalam kes $test1, perbandingan $test1 == 0 sedang menilai rentetan $test1 sebagai integer, yang menghasilkan 0. Oleh itu, ia memenuhi syarat kesamaan dan mengeluarkan "Ujian 1 Sama!?"
Pengecualian kepada Peraturan
Walau bagaimanapun, dalam kes $test2, penukaran integer gagal kerana ia mengandungi aksara tidak sah, 'b'. Akibatnya, PHP menukar $test2 kepada 0 dalam konteks integer, menjadikan perbandingan $test2 == 0 palsu.
Kesimpulan
Ketidakseragaman yang jelas dalam membandingkan rentetan kepada integer diselesaikan dengan memahami peraturan perbandingan longgar PHP dan mekanisme penukaran rentetan kepada nombornya. Apabila membandingkan rentetan kepada 0, peraturan penukaran menentukan sama ada perbandingan itu benar atau salah.
Atas ialah kandungan terperinci Mengapa Membandingkan String dengan 0 dalam PHP Kadang-kadang Kembali Benar dan Kadang-kadang Kembali Salah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!