Rumah > pembangunan bahagian belakang > tutorial php > Mengapakah Menyemak Nilai Pulangan `strpos()` Secara Longgar Membawa kepada Keputusan Tidak Dijangka dalam PHP?

Mengapakah Menyemak Nilai Pulangan `strpos()` Secara Longgar Membawa kepada Keputusan Tidak Dijangka dalam PHP?

Barbara Streisand
Lepaskan: 2024-12-11 20:15:11
asal
807 orang telah melayarinya

Why Does Loosely Checking `strpos()`'s Return Value Lead to Unexpected Results in PHP?

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)
)
Salin selepas log masuk

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)
)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan