switch ステートメントは、同じ式を持つ一連の IF ステートメントに似ています。同じ変数 (または式) をさまざまな値と比較し、どの値と等しいかに応じて異なるコードを実行する必要がある状況は数多くあります。これはまさに switch ステートメントの目的です。
次の 2 つの例では、2 つの異なる方法を使用して同じことを実現しています。1 つは一連の if ステートメントを使用し、もう 1 つは switch ステートメントを使用します。 switch
構造体では文字列を使用できます <?phpif ($i == 0) { echo "i equals 0";} elseif ($i == 1) { echo "i equals 1";} elseif ($i == 2) { echo "i equals 2";}switch ($i) { case 0: echo "i equals 0"; break; case 1: echo "i equals 1"; break; case 2: echo "i equals 2"; break;}?>
エラーを回避するには、switch がどのように実行されるかを理解することが非常に重要です。 switch ステートメントは 1 行ずつ (実際にはステートメントごとに) 実行されます。最初はコードは実行されません。 case ステートメントの値が switch 式の値と一致する場合にのみ、PHP は switch ブロックの終わりまで、または最初の Break ステートメントに遭遇するまでステートメントの実行を開始します。ケースのステートメントセグメントの最後にbreakを書かないと、PHPは次のケースでもステートメントセグメントを実行し続けます。例: <?phpswitch ($i) {case "apple": echo "i is apple"; break;case "bar": echo "i is bar"; break;case "cake": echo "i is cake"; break;}?>
$i が 0 に等しい場合、PHP はすべての print ステートメントを実行します。 $i が 1 の場合、PHP は次の 2 つの print ステートメントを実行します。 $i が 2 に等しい場合にのみ、「期待される」結果が得られます。つまり、「i は 2 に等しい」だけです。したがって、break ステートメントを忘れないことが重要です (場合によっては意図的にブレーク ステートメントの提供を避けたい場合でも)。
<?phpswitch ($i) { case 0: echo "i equals 0"; case 1: echo "i equals 1"; case 2: echo "i equals 2";}?>ケースの特別なケースがデフォルトです。他のどの大文字と小文字も一致しないあらゆる大文字と小文字が一致します。例:
<?phpswitch ($i) { case 0: case 1: case 2: echo "i is less than 3 but not negative"; break; case 3: echo "i is 3";}?>
case 式は、単純な型 (つまり、文字列だけでなく整数または浮動小数点数) に評価される任意の式にすることができます。配列またはオブジェクトは、単純型に逆参照されない限り使用できません。
switch は、代替構文によるフロー制御をサポートします。
<?phpswitch ($i) { case 0: echo "i equals 0"; break; case 1: echo "i equals 1"; break; case 2: echo "i equals 2"; break; default: echo "i is not equal to 0, 1 or 2";}?>
では、case ステートメントの後にコロン (:) の代わりにセミコロン (;) を使用できます。例:
<?phpswitch ($i): case 0: echo "i equals 0"; break; case 1: echo "i equals 1"; break; case 2: echo "i equals 2"; break; default: echo "i is not equal to 0, 1 or 2";endswitch;?>