首頁 >後端開發 >php教程 >為什麼在 PHP 字串搜尋中 strpos() 與 `=== true` 比較失敗?

為什麼在 PHP 字串搜尋中 strpos() 與 `=== true` 比較失敗?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-16 18:15:11222瀏覽

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

意想不到的真相:了解strpos() 比較中的不匹配

儘管PHP 函數strpos() 經常用於字串搜尋,但它具有將其結果與真實結果進行比較時的非常規行為。為了理解這個異常,讓我們檢查一段程式碼:

$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 />';
    }
}

令人驚訝的是,這段程式碼列印出「Acceptable!」對於$unacceptables 陣列中的每個元素,即使在$link 變數中存在“https:”。

要解開這個謎題,我們必須深入研究 strpos() 的語意。如其文件所述,strpos() 傳回 $link 中 $unacceptable 字串的「第一次出現的數字位置」。在這種情況下,strpos() 在位置 0 處找到「https:」並傳回 0,這是 PHP 中的真值。

因此,if 語句中的條件(strpos($link, $unacceptable) === true) 每次都會計算為true,因為strpos() 總是傳回一個數字位置,該位置始終被強制轉換為布林值true。

要修正此問題,我們應該使用非嚴格比較運算子(!==):

if (strpos($link, $unacceptable) !== false) {

透過將比較更改為“不等於false”,我們確保if 語句僅在strpos() 時計算結果為true找到匹配項並傳回非零值(即除0 之外的任何數字位置)。

以上是為什麼在 PHP 字串搜尋中 strpos() 與 `=== true` 比較失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn