Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Perbandingan Longgar dengan strpos() dalam PHP Membawa kepada Keputusan Yang Tidak Dijangka?

Mengapa Perbandingan Longgar dengan strpos() dalam PHP Membawa kepada Keputusan Yang Tidak Dijangka?

Barbara Streisand
Barbara Streisandasal
2024-12-26 10:38:09945semak imbas

Why Does Loose Comparison with strpos() in PHP Lead to Unexpected Results?

Tafsiran Longgar bagi strpos() Nilai Pulangan Membawa Kepada Hasil Yang Tidak Dijangka

Dalam usaha untuk mencari subrentetan tertentu dalam rentetan, terdapat perangkap yang boleh membawa kepada hasil yang tidak diingini apabila menggunakan fungsi strpos() PHP. Mari kita bongkar misteri di sebalik mengapa semakan longgar nilai pulangan strpos() boleh menyebabkan kekeliruan.

Pertimbangkan coretan kod di bawah:

if (
    strpos($grafik['data'], $ss1) != false
    && strpos($grafik['data'], $ss2) != false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)

Dalam kod ini, strpos() digunakan untuk menentukan kedudukan subrentetan $ss1 dan $ss2 dalam rentetan $grafik['data']. Tujuannya adalah untuk menyemak kehadiran kedua-dua subrentetan dan memastikan $ss1 dipesan sebelum $ss2.

Menurut manual PHP, strpos() mengembalikan palsu jika subrentetan tidak ditemui. Walau bagaimanapun, didapati bahawa apabila subrentetan bermula pada kedudukan sifar (iaitu, permulaan rentetan), strpos() mengembalikan 0. Ini membawa kepada tafsiran yang tidak diingini di mana ungkapan:

strpos($grafik['data'], $ss1) != false

menilai kepada palsu, walaupun $ss1 hadir dari kedudukan sifar. Penyebabnya ialah pengendali kesetaraan yang lemah !=, yang menganggap 0 sebagai bersamaan dengan palsu.

Untuk membetulkan isu ini, pengendali kesetaraan ketat === hendaklah digunakan sebaliknya:

if (
    strpos($grafik['data'], $ss1) !== false
    && strpos($grafik['data'], $ss2) !== false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)

Operator === melakukan perbandingan yang ketat, memastikan bahawa 0 tidak dianggap bersamaan dengan palsu. Dengan pembetulan ini, kod akan menentukan dengan betul kehadiran $ss1 dan $ss2 serta kedudukan relatifnya.

Atas ialah kandungan terperinci Mengapa Perbandingan Longgar dengan strpos() dalam PHP Membawa kepada Keputusan Yang Tidak Dijangka?. 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