PHP:strpos関数に見る結果判定の注意点:===演算子
PHP (55 items)
2005年02月22日
PHPのstrpos関数。
ASPで言えばInStr関数、Javaで言えばindexOfメソッドと、
色んな言語に必ず含まれる機能と言っていいでしょう。
で、PHPでこのstrpos関数を扱う際は、ほんのちょっとした注意が必要です。
ASPで言えばInStr関数、Javaで言えばindexOfメソッドと、
色んな言語に必ず含まれる機能と言っていいでしょう。
で、PHPでこのstrpos関数を扱う際は、ほんのちょっとした注意が必要です。
まあ、マニュアルをちゃんと読めば良いだけの話ですがね。。
えー、ここまではいいんですが、注意すべきは以下の一文。
つまり、strpos関数の戻り値判定には、”===演算子”という、
”=”を3つも並べた比較演算子で比較しないとちゃんと判定できませんよという話。
ついついうっかり、”=”2つで比較してしまう場合もあります。
特に他の言語経験者ならあり得ます。。
しかも、”=”2つでもコーディングエラーではないですし、
正しく判定したり、一部の文字列のみ判定したりと中途半端に比較してくれます。
とにかく、マニュアルはちゃんと読みましょうという話です。。。
strpos -- 文字列が最初に現れる場所を見つける
説明
int strpos ( string haystack, string needle [, int offset])
文字列 haystack の中で、 needleが最初に現れた位置を数字で返します。 strrpos()とは異なり、この関数は needle パラメータとして文字列全体をとり、そ の文字列全体が検索対象となります。
needleが見つからない場合、 strpos()は boolean FALSEを返しま す。
えー、ここまではいいんですが、注意すべきは以下の一文。
警告
この関数は論理値 FALSEを返す可能性がありますが、FALSEとして評価される 0や""といった値を返す可能性もあります。詳細については論理値の章を参照してください。この関数の返り値を調べるには ===演算子を使用して下さい。
つまり、strpos関数の戻り値判定には、”===演算子”という、
”=”を3つも並べた比較演算子で比較しないとちゃんと判定できませんよという話。
if (strpos($str, 'ABCDE') === false) {
・・・
} else {
・・・
}
ついついうっかり、”=”2つで比較してしまう場合もあります。
特に他の言語経験者ならあり得ます。。
しかも、”=”2つでもコーディングエラーではないですし、
正しく判定したり、一部の文字列のみ判定したりと中途半端に比較してくれます。
とにかく、マニュアルはちゃんと読みましょうという話です。。。
前の記事 次の記事