switch 文は、同じ式を用いてIF文を並べたのに似ています。 同じ変数を異なる値と比較し、値に応じて異なったコードを実行したいと 思うことがしばしばあるかと思います。 switch 文は、まさにこのためにあるのです。
次の二つの例は、同じことを二つの異なった方法で書いたものです。 一つは、 if 文を、もう一つは switch 文を使っています。
失敗を避けるために switch 文がどのように実行されるのかを 理解することが重要です。 switch 文は、行毎に実行されます。 (実際には、文毎に実行されます。)初めは、何も実行しません。 switch 式の値と一致する値を有する case 文が見つけられたときに初めてPHにより 命令の実行が行われます。 PHPは switch ブロックの終わりまたは最初の break 文まで実行を続けます。 CASE文の終わりに break 文を書かない場合は、PHPは 次のCASE文を実行しつづけます。例えば、
ここで、$iが0に等しい場合は、PHPは全ての文を出力してしまいます! $iが1の場合、PHPは最後の二つの文を出力します。 $iが2に等しい場合のみ、'期待した'動作をし、'iは2に等しい'と表示します。 このため、(ある種の状況下では、BREAKを付加することを避けたいと 思うかもしれませんが、) break 文を忘れないようにすることが重要です。
switch 文では、条件は1度だけ評価され、 その結果が各 case 文と比較されます。 elseif 文では、条件は、再度評価されます。 使用する条件が単純な比較処理よりも複雑な処理を行ったり、 重い繰り返し処理を行う場合、 switch の方が より処理が速い可能性があります。
caseに付随する文は、空とすることが可能です。 この場合、次のcaseに付随する文に制御が移行します。
defaultは、case文の特別な場合です。これは他の全てのcaseに マッチしない場合に実行され、最後の case 文に置 く必要があります。例を以下に示します。
case 式は、スカラー型に式を評価する 任意の式、つまり、整数、浮動小数点、文字列とすることができます。 配列又はオブジェクトは、単純な型にキャストされていない限り 使用することができません。
switch文の制御構造に関する別の構文がサポートされています。 詳細は、 制御構造に関する別の構文 を参照下さい。