- ベストアンサー
PHP strpos演算子の意味が分からない
- PHPのstrpos演算子とは何か、その意味を教えてください。
- strpos関数は、指定した文字列内で指定した文字列が最初に現れる位置を返すものです。
- ===演算子を使用すると、strpos関数は文字列が一致するかどうかだけでなく、位置も一致するかどうかも確認します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
=== の否定が !== です。 マニュアルの「この関数の返り値を調べるには ===演算子 を 使用してください。」とは (1)『FALSEである(見つからなかった)』という判定には===を使う (2)『FALSEでない(見つかって、その位置が数値で返ってきた)』という判定には!==を使う ということです。(2)のケースまで === を使え、という意味ではありません。 # 結果を否定して (!(strpos($hdr[0],'404')===false)) としたり、 # thenとelseの内容を入れ替えて #if (strpos($hdr[0],'404')===false){ # ... #} else { # echo 'Not Found'; #} # としたりもできますが。 > strpos($hdr[0],'404')===false 「404が見つからなかったら」の意味になるので、意味が反転します。 200等、404以外の全てが「echo 'Not Found';」になります。 それが「書いた通りの正しい動作」です。「期待した動作」ではないでしょうが。 > strpos($hdr[0],'404')==true > だったら、期待通りの動作になります たまたまです。 http://www.php.net/manual/ja/types.comparisons.php にあるように、 404が先頭で無いので、 404だった場合: 0でない数値 == TRUE → TRUE 404でなかった場合: FALSE == TRUE → FALSE になり、正常に見えるだけです。404が先頭から始まっていたら 404だった場合: 0 == TRUE → FALSE 404でなかった場合: FALSE == TRUE → FALSE と、「期待通り」には動作しません。 > if (strpos($hdr[0],'404')===true){ > だと、何が来ても同じ結果になります。 strposはTRUEを返さないので、===trueは常に成立しません。「書いた通りの正しい動作」です。
お礼
回答ありがとうございました。 >=== の否定が !== 初めて知りました >マニュアルの「この関数の返り値を調べるには ===演算子 を 使用してください。」とは >(1)『FALSEである(見つからなかった)』という判定には===を使う >(2)『FALSEでない(見つかって、その位置が数値で返ってきた)』という判定には!==を使う >ということです。(2)のケースまで === を使え、という意味ではありません なるほど…。読み違えて、全く気がつきませんでした >「404が見つからなかったら」の意味になるので、意味が反転します。 >200等、404以外の全てが「echo 'Not Found';」になります 当初、404も「echo 'Not Found';」になると思っていたのですが、勘違いでした。 改めて試したら、ご指摘通りの動作になりました >> strpos($hdr[0],'404')==true >> だったら、期待通りの動作になります >たまたまです。 ここの説明も詳しくて大変参考になりました >strposはTRUEを返さないので、===trueは常に成立しません。「書いた通りの正しい動作」です 全ての疑問に丁寧に解説いただいたので、助かりました。 また、深夜(もしくは早朝)でのご対応、ありがとうございましたー