鬆散檢查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中文網其他相關文章!