strpos() と True を厳密に比較すると予期しない結果が生じるのはなぜですか?
質問:
指定されたコードの目的は、受け入れられないものを見つけることです。 $link 変数内の文字列。ただし、$link に「https」が存在する場合でも、コードは「Acceptable」を出力します。この予期しない動作の背後にある理由は何ですか?
$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 />'; } }
答え:
その説明は、strpos() 関数の性質にあります。文書化されているように、strpos() は、$link 内で $unacceptable が最初に出現する位置の数値を返します。ただし、元のコードでは、ブール値を持つ true と誤って比較されます。これにより、予期しない結果が生じます。
これを解決するには、代わりに false 以外の値をチェックするように比較を変更する必要があります。 !== false を使用すると、コードは検出された許容できない文字列を正しく識別します。
// ... if (strpos($link, $unacceptable) !== false) {
以上が文字列をチェックするときに `strpos() === true` が予期しない結果をもたらすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。