PHPプログラミングでは、 StripoS関数は非常に一般的な文字列操作関数です。文字列が最初に別の文字列に表示され、ケース非感受性である場所を見つけるために使用されます。その使用法は一般的に次のとおりです。
stripos($haystack, $needle);
ここで、 $ haystackは検索する文字列であり、 $針はあなたが探しているサブストリングです。 $針が見つかった場合、 $ haystackでサブストリングの位置を返し、それ以外の場合はfalseが返されます。
スイッチステートメントは、通常、定数、数値、または文字列の正確な一致に依存する一連の可能なブランチ判断を実行するために使用されます。 PHP従来のスイッチステートメントは、ストリップを使用した文字列マッチングを直接サポートしません。
この簡単なコードの例を考えてみましょう。
<?php
$searchString = "Hello World";
switch (stripos($searchString, "hello")) {
case 0:
echo "Found 'hello' at the start!";
break;
case false:
echo "'hello' not found!";
break;
default:
echo "Found 'hello' at position " . stripos($searchString, "hello");
}
?>
表面的には、 Striposが整数(サブストリングの位置を表す)またはFalseを返すため、適切に機能するようです。ただし、実際にはいくつかの問題があります。
スイッチステートメントは、条件を判断するときにタイプ変換を実行します。これは、 Striposが0(サブストリングが文字列の先頭にあることを意味する)などの整数を返す場合、 falseとして処理されることを意味します。 PHPの0はブールの偽と見なされるため、スイッチステートメントでは、ケース0: case falseと競合する可能性があります。
具体的には、 StripoSによって返される0は、 SwitchによってBoolean Falseに変換され、条件付きブランチ判断エラーが発生します。
この問題を回避するために、明示的なタイプチェックを使用して、 StripoSによって返された値が混乱していないことを確認できます。たとえば、厳密な比較には===を使用するか、最初にStriposがFalseを返すかどうかを判断してから、分岐判断を行うことができます。
これが改良されたバージョンです:
<?php
$searchString = "Hello World";
$position = stripos($searchString, "hello");
if ($position === false) {
echo "'hello' not found!";
} elseif ($position === 0) {
echo "Found 'hello' at the start!";
} else {
echo "Found 'hello' at position " . $position;
}
?>
Switchがタイプ変換を実行するため、 StripOSをSwitchステートメントで直接使用することはできません。StripOSによって返される0はFalseと間違え、判断誤差が発生します。この問題を回避するには、スイッチの代わりにIFステートメントを使用して、厳密なタイプの比較を実行することをお勧めします。