Rumah > pembangunan bahagian belakang > tutorial php > Mengapa Perbandingan strpos() dengan `=== true` Gagal dalam Carian Rentetan PHP?

Mengapa Perbandingan strpos() dengan `=== true` Gagal dalam Carian Rentetan PHP?

Mary-Kate Olsen
Lepaskan: 2024-12-16 18:15:11
asal
218 orang telah melayarinya

Why Does strpos() Comparison with `=== true` Fail in PHP String Searches?

Kebenaran yang Tidak Diingini: Memahami Ketidakpadanan dalam Perbandingan strpos()

Walaupun penggunaan biasa untuk carian rentetan, fungsi PHP strpos() mempunyai tingkah laku yang tidak konvensional apabila membandingkan hasilnya dengan benar. Untuk memahami anomali ini, mari kita periksa coretan kod:

$link = 'https://google.com';
$unacceptables = ['https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png'];

foreach ($unacceptables as $unacceptable) {
    if (strpos($link, $unacceptable) === true) {
        echo 'Unacceptable Found<br />';
    } else {
        echo 'Acceptable!<br />';
    }
}
Salin selepas log masuk

Anehnya, kod ini mencetak "Boleh Diterima!" untuk setiap elemen dalam tatasusunan $unacceptables, walaupun "https:" hadir dalam pembolehubah $link.

Untuk merungkai teka-teki ini, kita mesti mendalami semantik strpos(). Seperti yang dinyatakan oleh dokumentasinya, strpos() mengembalikan "kedudukan angka kejadian pertama" rentetan $unacceptable dalam $link. Dalam kes ini, strpos() mencari "https:" pada kedudukan 0 dan mengembalikan 0, yang merupakan nilai yang benar dalam PHP.

Oleh itu, syarat dalam pernyataan if (strpos($link, $unacceptable) === true) menilai kepada true setiap kali kerana strpos() sentiasa mengembalikan kedudukan angka, yang sentiasa dipaksa kepada boolean benar.

Untuk membetulkannya, kita harus menggunakan operator perbandingan yang tidak ketat (!==):

if (strpos($link, $unacceptable) !== false) {
Salin selepas log masuk

Dengan menukar perbandingan kepada "tidak sama dengan palsu," kami memastikan bahawa pernyataan if hanya dinilai kepada benar apabila strpos() menemui padanan dan mengembalikan nilai bukan sifar (iaitu, sebarang kedudukan berangka selain daripada 0).

Atas ialah kandungan terperinci Mengapa Perbandingan strpos() dengan `=== true` Gagal dalam Carian Rentetan 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