String to Integer Comparison Anomali
Apabila membandingkan rentetan dengan integer dalam PHP, anda mungkin menemui hasil yang tidak dijangka. Pertimbangkan kod berikut:
$test1 = "d85d1d81b25614a3504a3d5601a9cb2e"; $test2 = "3581169b064f71be1630b321d3ca318f"; if ($test1 == 0) echo "Test 1 is Equal!?"; if ($test2 == 0) echo "Test 2 is Equal!?"; // Returns: Test 1 is Equal!?
Anehnya, perbandingan $test1 dinilai kepada benar, walaupun nilainya bukan angka. Anomali ini berpunca daripada peraturan penukaran jenis longgar PHP.
Penukaran Rentetan kepada Nombor
Menurut manual PHP:
"Apabila rentetan dinilai dalam konteks berangka, nilai dan jenis yang terhasil ditentukan sebagai berikut:
Nilai diberikan oleh bahagian awal rentetan Jika rentetan bermula dengan data angka yang sah, ini akan menjadi nilai yang digunakan. Jika tidak, nilai akan menjadi 0 (sifar)."
Menjelaskan Anomali
Dalam contoh yang disediakan, $test1 tidak mengandungi sebarang titik perpuluhan , eksponen atau sifar pendahuluan. Oleh itu, ia ditafsirkan sebagai integer dengan nilai awal 0. Memandangkan 0 adalah sama dengan integer 0 dalam PHP, perbandingan dinilai kepada benar.
Mengapa $test2 Gagal
Rentetan $test2 juga mengandungi aksara bukan angka. Walau bagaimanapun, kerana ia bermula dengan digit, nilai awalnya ditafsirkan sebagai integer 3581169. Integer ini tidak sama dengan 0, menghasilkan perbandingan palsu.
Mengelakkan Anomali Jenis
Untuk mengelakkan anomali ini, sentiasa gunakan perbandingan jenis yang ketat. Dalam contoh yang diberikan, anda boleh menulis semula kod seperti berikut:
if ($test1 === "0") echo "Test 1 is Equal!"; if ($test2 === "0") echo "Test 2 is Equal!?";
Dengan menggunakan operator perbandingan yang ketat ===, anda memastikan bahawa nilai adalah daripada jenis yang sama dan mengelakkan hasil yang tidak dijangka.
Atas ialah kandungan terperinci Mengapa Perbandingan Jenis Longgar PHP Membawa kepada Keputusan Yang Tidak Dijangka Apabila Membandingkan Rentetan dan Integer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!