首頁 > 後端開發 > php教程 > 為什麼在 PHP 中鬆散地檢查 `strpos()` 的回傳值會導致意外結果?

為什麼在 PHP 中鬆散地檢查 `strpos()` 的回傳值會導致意外結果?

Barbara Streisand
發布: 2024-12-11 20:15:11
原創
808 人瀏覽過

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

鬆散檢查strpos() 傳回值的意外後果

當使用strpos() 定位字串中的子字串時,必須了解使用相等或不等比較來評估其回傳值的潛在陷阱。雖然 PHP 文件指出當未找到子字串時 strpos() 傳回 false,但當它傳回 0(表示字串的開頭)時,這可能會導致意外結果。

為了說明此問題,請考慮以下程式碼片段:

if (
    strpos($grafik['data'], $ss1) <> false
    && strpos($grafik['data'], $ss2) <> false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)
登入後複製

目的是驗證$grafik['data'] 中是否存在$ss1 和$ss2 並確保$ss1出現在$ss2 之前。但是,這並沒有考慮到當 $ss1 從字串開頭開始時 strpos() 傳回 0 的事實。

根據PHP 文件:

警告

此函數可能會傳回布林值FALSE,但也可能傳回計算結果的非布林值為FALSE,例如0 或“”。請閱讀有關布林值的部分以獲取更多資訊。使用 === 運算子來測試該函數的傳回值。

要解決這個問題,需要使用嚴格相等運算符 === 而不是鬆散相等運算符 ==。

if (
    strpos($grafik['data'], $ss1) !== false
    && strpos($grafik['data'], $ss2) !== false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)
登入後複製

透過使用 ===,當找到子字串時,比較將正確地將 strpos() 的回傳值評估為 true。此修改確保了程式碼片段的預期邏輯行為。

以上是為什麼在 PHP 中鬆散地檢查 `strpos()` 的回傳值會導致意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板