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