if(strpos("http://www.example.com","http://www.")==0){ // do work}
私はこれがtrueとして解決することを期待しますが、実際には解決します。しかし、私が行うとどうなりますか
if(strpos("abcdefghijklmnop","http://www.")==0){// do work}
Strposが0に変換されるfalseを返すため、これはphp 5にも渡されます。
これは正しい考え方/行動ですか?もしそうなら、その部分文字列が別の文字列の先頭にあることをテストするための回避策は何ですか?
はい、これは正しい/予想される動作です:
strpos
は、文字列の先頭に一致がある場合に0
を返すことができますfalse
を返します重要なのは、==
とfalse
を比較するために0
を使用してはならないということです。次のように===
を使用する必要があります。
if(strpos("abcdefghijklmnop","http://www.") === 0) {
}
または:
if(strpos("abcdefghijklmnop","http://www.") === false) {
}
詳細については、 比較演算子 を参照してください。
$a == $b
が$a
と等しい場合、$b
はTRUE
になります。$a === $b
が$a
と等しい場合、$b
はTRUE
であり、それらは同じ型。そして、 strpos
のマニュアルページを引用します:
この関数はブール値
FALSE
を返す場合がありますが、0
や""
など、FALSE
と評価される非ブール値を返す場合もあります。
詳細については、 Booleans のセクションをお読みください。
この関数の戻り値をテストするには、===
演算子 を使用します。
===
および!==
以下に示すように、タイプand値を比較します。
if (strpos("abcdefghijklmnop", "http://www.") !== false) {
// do work
}
strposは、intまたはboolean falseを返します。 ==演算子も0を評価してfalseを意味します。=が評価されるかどうかを単に比較するのではなく、比較される型が同じであることを確認する===演算子(3つの等号)を使用したいとします。
そう
if (strpos($hastack, $needle) === 0)
{
// the $needle is found at position 0 in the $haystack
}
0
は、最初に一致が見つかった場合のstrpos
からの可能な戻り値です。一致が見つからない場合は、false
(boolean)を返します。したがって、値をチェックするだけの===
を使用するのではなく、値とタイプをチェックする==
演算子を使用してstrpos
の戻り値をチェックする必要があります。