ホームページ >バックエンド開発 >PHPチュートリアル >PHP で「strpos()」と「true」を比較しても文字列の出現を検出できないのはなぜですか?

PHP で「strpos()」と「true」を比較しても文字列の出現を検出できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-10 08:29:10338ブラウズ

Why Does Comparing `strpos()` to `true` Fail to Detect String Occurrences in PHP?

strpos() と true の厳密な比較の誤解

文字列に望ましくない要素が含まれているかどうかを判断しようとする際、プログラマが 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!」と出力します。 https が $link に存在するにもかかわらず、$unacceptables の各要素に対して。この一見矛盾した動作は、strpos() 自体の性質から生じています。

公式 PHP ドキュメントを詳しく調べると、この関数の真の目的が明らかになります。

ニードルが最初に出現した位置の数値を返します。 haystack string.

したがって、strpos() の結果を true と直接比較する場合、 true との同等性ではなく、$link 内の望ましくない要素の存在を効果的にチェックします。

この問題を修正するには、より適切なアプローチは、if ステートメントで !== false を使用することです。

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

これにより、strpos() が望ましくない要素の存在を検出したかどうかを正しく評価し、望ましい結果が得られます。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。