SWITCH 文は、同じ式を用いて IF 文を並べたのに似ています。 同じ変数を異なる値と比較し、値に応じて異なったコードを実行したいと 思うことがしばしばあるかと思います。 SWITCH 文は、まさにこのためにあるのです。
次の二つの例は、同じことを二つの異なった方法で書いたものです。 一つは、IF 文を、もう一つは、SWITCH 文を使っています。
/* 例 1 */
if ($i == 0) {
print "i は 0 に等しい";
}
if ($i == 1) {
print "i は 1 に等しい";
}
if ($i == 2) {
print "i は 2 に等しい";
}
/* 例 2 */
switch ($i) {
case 0:
print "i は 0 に等しい";
break;
case 1:
print "i は 1 に等しい";
break;
case 2:
print "i は 2 に等しい";
break;
}失敗を避けるために SWITCH 文がどのように実行されるのかを 理解することが重要です。 SWITCH 文は、行毎に実行されます。(実際には、文毎に実行されます。) 初めは、何も実行しません。 SWITCH 式の値と一致する値を有する CASE 文が見つけられたときに PHP は命令の実行を開始します。 PHP は SWITCH ブロックの終わりまたは最初の BREAK 文まで実行を 続けます。 CASE 文の終わりに BREAK 文を書かない場合は、PHP は 次の CASE 文を実行しつづけます。例えば、
/* 例 3 */
switch ($i) {
case 0:
print "i は 0 に等しい";
case 1:
print "i は 1 に等しい";
case 2:
print "i は 2 に等しい";
}ここで、$i が 0 に等しい場合は、PHP は全ての文を出力してしまいます! $i が 1 の場合、PHP は最後の二つの文を出力します。 $i が 2 に等しい場合のみ、'期待した'動作をし、 'i は 2 に等しい' と表示します。 このため、(ある種の状況下では、BREAK を付加することを避けたいと 思うかもしれませんが、) BREAK 文を忘れないようにすることは重要です。
default は、特別な case 文です。 これは、他の全ての case にマッチしない場合に、 実行されます。例を以下に示します。
/* example 4 */
switch ($i) {
case 0:
print "i は 0 に等しい";
break;
case 1:
print "i は 1 に等しい";
break;
case 2:
print "i は 2 に等しい";
break;
default:
print "i は 0 でも 1 でも 2 でもない";
}話しておく価値のある別の事実は、 CASE 式は、整数、実数、文字列といったスカラー型として 値の評価を行うということです。 配列やオブジェクトは、PHP を壊すわけではありませんが、 CASE 式の中では無意味です。