ホームページ > バックエンド開発 > PHPチュートリアル > PHP 文字列検索で strpos() と `=== true` の比較が失敗するのはなぜですか?

PHP 文字列検索で strpos() と `=== true` の比較が失敗するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-16 18:15:11
オリジナル
219 人が閲覧しました

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

意図しない真実: strpos() 比較の不一致を理解する

PHP 関数 strpos() は文字列検索によく使用されますが、結果を true と比較するときの型破りな動作。この異常を理解するために、コードのスニペットを調べてみましょう:

$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:」を見つけ、PHP の真の値である 0 を返します。

したがって、if ステートメントの条件 (strpos($link, $unacceptable) === true) は、strpos() が常に数値位置を返し、常にブール値に強制されるため、毎回 true と評価されます。 true.

これを修正するには、非厳密比較演算子 (!==) を使用する必要があります:

if (strpos($link, $unacceptable) !== false) {
ログイン後にコピー

比較を「false に等しくない」に変更することで、次のことが保証されます。 if ステートメントは、strpos() が一致を見つけてゼロ以外の値 (つまり、0 以外の数値位置) を返した場合にのみ true と評価されます。

以上がPHP 文字列検索で strpos() と `=== true` の比較が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート