strpos() の数値比較を理解する
PHP で strpos() 関数を使用して厳密な等価比較を実行すると、予期しない結果が発生する可能性があります。この記事では、strpos() と true を比較すると意図した逆の結果が生じる理由を検証します。
提供されたコードでは、if ステートメントは strpos($link, $unacceptable) の結果を true と比較します。ただし、この比較では、$link 内の望ましくない文字列の存在を検出するという本来の目的は達成できません。
なぜこれが起こるのかを理解するには、strpos() のドキュメントを参照する必要があります。ドキュメントによると、strpos() は、対象の文字列内で検索された文字列が最初に出現した位置を数値で返します。ただし、出現が見つからない場合は false を返します。
コード スニペットでは、if ステートメントは strpos() が true を返すかどうかをチェックします。 strpos() は、一致が見つかった場合は数値 (0 以上) を返し、一致がない場合は false を返すため、一致が見つかった場合、ステートメントは常に false と評価されます。これは、厳密な等価比較では true が無効な数値とみなされているためです。
この問題を解決するには、比較演算子を !== false に変更する必要があります。これにより、strpos() の結果が正しくないかどうかがチェックされます。 false (つまり、一致が見つかりました):
// ... if (strpos($link, $unacceptable) !== false) { echo 'Unacceptable Found<br />'; } else { echo 'Acceptable!<br />'; } // ...
この比較を使用すると、コードは、受け入れられない文字列の 1 つがファイル内に存在する場合に正しく識別します。 $link 変数を使用して、適切なメッセージを出力します。
以上がPHP で `strpos() !== true` が文字列の存在を検出できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。