現在の位置: ホーム> 最新記事一覧> StrposがFalseを返すことを理解する方法は? STRPOSブール値の使用トラップの詳細な分析

StrposがFalseを返すことを理解する方法は? STRPOSブール値の使用トラップの詳細な分析

M66 2025-07-26

PHPでは、 strpos関数を使用して、文字列が最初に別の文字列に表示される場所を見つけます。ターゲット文字列に指定されたサブストリングが見つからない場合、 strposはfalseを返します。ただし、 FalseはPHPの「False Value」と見なされるため、特に戻り値が0 (文字列の開始位置)と混同される場合、返品値を扱う場合、一部のプログラマー間で混乱を引き起こす可能性があります。この記事では、 STRPOSが虚偽を返す理由を徹底的に分析し、トラップを使用し、これらの状況を効果的に処理する方法を分析します。

1。STRPOS関数の基本的な使用

STRPOS関数のプロトタイプは次のとおりです。

 <span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
  • $ haystack :検索する文字列。

  • $針:見つかるサブストリング。

  • $ offset :オプションの開始オフセット、検索を開始する場所を指定します。

$針が$ haystackに存在する場合、 strposは$針が最初に表示される場所を返します(インデックスは0から始まります)。 $針が見つからない場合、 falseが返されます。

2。strpos虚偽を返すときの一般的な誤解

PHPでは、 Falseは「False値」として扱われるため、ブールの文脈では、 FalseFalseとして扱われ、他の非ゼロ値はであると扱われます。問題は、 strposがfalseまたは0を返す可能性があることです。 0はPHPの誤った値であるため、これは比較するときにプログラマー間で混乱を引き起こします。

たとえば、次のコードはエラーを生成する場合があります。

 <span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Found!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Not found!"</span></span><span>;
}
</span></span>

$ haystackでの$ edeleの開始位置が0 (つまり、文字列の先頭にあります)の場合、 Strposは0を返し、判断が誤りとして扱われる場合、誤ってサブストリングが見つからなかったと信じているため、 「見つかりません!」

3。ストップの返品値を正しく判断する方法

この問題を回避するには、 ===比較が値だけでなくタイプでもあるため、厳密な比較演算子( === )を使用する必要があります。この場合、サブストリングは、戻り値が厳密にfalseに等しい場合にのみ見つかりません。

 <span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Found!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Not found!"</span></span><span>;
}
</span></span>

このアプローチは、 0falseと間違えられている状況を回避します。コードは、$針が表示される場所が文字列の始まり(つまり、インデックスは0 )または中央のものであるかどうかに関係なく、それを正しく処理できます。

4. strposが虚偽を返す状況

strposが虚偽を返すような状況がいくつかあります。

  • サブストリングは存在しません。最も一般的なケースは、ターゲットストリング$ hayStackにサブストリング$針がまったく表示されないことです。

  • 無効なタイプ入力STRPOSは、着信パラメータータイプが正しくない場合にfalseを返す場合があります( $ haystackなどは文字列ではありません)。

  • オフセットが大きすぎる:オフセットが設定されている場合、残りの文字列で$針を見つけることができなくなると、 strposfalseを返します。

5。STRPOS使用する場合のベストプラクティス

誤解に巻き込まれないようにするために、ここにSTRPOSの使用のためのいくつかのベストプラクティスがあります。

  • 常に厳密な比較( === )を使用してください。前述のように、 0falseを混乱させるため、ゆるい比較演算子( == )を使用しないでください。

  • パラメーターのタイプを確認します$ haystack$針が両方とも文字列タイプであることを確認してください。わからない場合は、 is_string()関数を使用して確認できます。

  • オフセットの理解:オフセットを使用する場合、オフセットの効果を明確にし、大きすぎる値の設定を避ける必要があります。これにより、サブストリング検索が失敗する可能性があります。

6。概要

STRPOS関数の戻り値は0またはfalseである場合があり、2つはPHPで異なるブールセマンティクスを持っています。 0がとして扱われることによって引き起こされるプログラムエラーを回避するために、厳密なタイプの比較( !== false )を常に使用して、サブストリングが見つかったかどうかを判断する必要があります。 STRPOSの仕組みとその返品値を適切に処理する方法を理解することは、潜在的なエラーを回避し、堅牢なコードを書き込むための鍵です。