Akibat Tidak Disengajakan Menyemak Nilai Pulangan strpos()
Apabila menggunakan strpos() untuk mencari subrentetan dalam rentetan, adalah penting untuk memahami potensi perangkap menggunakan kesamaan atau perbandingan ketidaksamaan untuk menilai nilai pulangannya. Walaupun dokumentasi PHP menyatakan bahawa strpos() mengembalikan palsu apabila subrentetan tidak ditemui, ini boleh membawa kepada hasil yang tidak dijangka apabila ia mengembalikan 0 (menunjukkan permulaan rentetan).
Untuk menggambarkan isu ini, pertimbangkan coretan kod berikut:
if ( strpos($grafik['data'], $ss1) <> false && strpos($grafik['data'], $ss2) <> false && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2) )
Niatnya adalah untuk mengesahkan kehadiran $ss1 dan $ss2 dalam $grafik['data'] dan pastikan $ss1 muncul sebelum $ss2. Walau bagaimanapun, ini tidak mengambil kira hakikat bahawa strpos() mengembalikan 0 apabila $ss1 bermula pada permulaan rentetan.
Mengikut dokumentasi PHP:
Amaran
Fungsi ini mungkin mengembalikan Boolean FALSE, tetapi mungkin juga mengembalikan nilai bukan Boolean yang menilai kepada SALAH, seperti 0 atau "". Sila baca bahagian Booleans untuk mendapatkan maklumat lanjut. Gunakan operator === untuk menguji nilai pulangan fungsi ini.
Untuk menangani isu ini, perlu menggunakan operator kesaksamaan yang ketat === dan bukannya operator kesaksamaan yang longgar ==.
if ( strpos($grafik['data'], $ss1) !== false && strpos($grafik['data'], $ss2) !== false && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2) )
Dengan menggunakan ===, perbandingan akan menilai dengan betul nilai pulangan strpos() sebagai benar apabila subrentetan ditemui. Pengubahsuaian ini memastikan gelagat logik yang dimaksudkan bagi coretan kod.
Atas ialah kandungan terperinci Mengapakah Menyemak Nilai Pulangan `strpos()` Secara Longgar Membawa kepada Keputusan Tidak Dijangka dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!