Php/docs/control-structures.switch

提供:Dev Guides
< Php
移動先:案内検索

switch

(PHP 4, PHP 5, PHP 7, PHP 8)

switch文は、同じ式を用いてIF文を並べたのに似ています。 同じ変数を異なる値と比較し、値に応じて異なったコードを実行したいと 思うことがしばしばあるかと思います。 switch文は、まさにこのためにあるのです。

注意:

他の言語とは違って、 continue命令は switch にも適用され、breakと同じ動作をします。 ループの内部で switch を使用しており、 外側のループの処理を続行させたい場合には、continue 2 を使用してください。

注意:

switch/case が行うのは、 緩やかな比較 であることに注意しましょう。

次の二つの例は、同じことを二つの異なった方法で書いたものです。 一つは、if文を、もう一つはswitch 文を使っています。

例1 switch構造

<?phpif ($i == 0) {    echo "iは0に等しい";} elseif ($i == 1) {    echo "iは1に等しい";} elseif ($i == 2) {    echo "iは2に等しい";}switch ($i) {    case 0:        echo "iは0に等しい";        break;    case 1:        echo "iは1に等しい";        break;    case 2:        echo "iは2に等しい";        break;}?>

例2 switch構造では文字列を使用できる

<?phpswitch ($i) {    case "apple":        echo "i is apple";        break;    case "bar":        echo "i is bar";        break;    case "cake":        echo "i is cake";        break;}?>

失敗を避けるためにswitch文がどのように実行されるのかを 理解することが重要です。 switch文は、行毎に実行されます。 (実際には、文毎に実行されます。)初めは、何も実行しません。 switch式の値と同じ値として評価される式を有する case文が見つけられたときに初めてPHPにより 命令の実行が行われます。 PHPはswitchブロックの終わりまたは最初の break文まで実行を続けます。 CASE文の終わりにbreak文を書かない場合は、PHPは 次のCASE文を実行しつづけます。例えば、

<?phpswitch ($i) {    case 0:        echo "iは0に等しい";    case 1:        echo "iは1に等しい";    case 2:        echo "iは2に等しい";}?>

ここで、$iが0に等しい場合は、PHPは全ての echo 文を出力してしまいます! $iが1の場合、PHPは最後の二つの echo 文を出力します。 $iが2に等しい場合のみ、'期待した'動作をし、 'iは2に等しい'と表示します。 このため (ある種の状況下では、BREAKを付加することを避けたいと 思うかもしれませんが)、 break文を忘れないようにすることが重要です。

switch文では、条件は1度だけ評価され、 その結果が各case文と比較されます。 elseif文では、条件は、再度評価されます。 使用する条件が単純な比較処理よりも複雑な処理を行ったり、 重い繰り返し処理を行う場合、switchの方が より処理が速い可能性があります。

caseに付随する文は、空とすることが可能です。 この場合、次のcaseに付随する文に制御が移行します。

<?phpswitch ($i) {    case 0:    case 1:    case 2:        echo "iは3より小さいですが負ではありません";        break;    case 3:        echo "iは3です";}?>

default は、case 文の特別な場合です。これは他の全ての case にマッチしない場合に実行されます。例を以下に示します。

<?phpswitch ($i) {    case 0:        echo "iは0に等しい";        break;    case 1:        echo "iは1に等しい";        break;    case 2:        echo "iは2に等しい";        break;    default:       echo "iは0,1,2に等しくない";}?>

注意:

複数の default を置くと、 E_COMPILE_ERROR エラーが発生します。

switch文の制御構造に関する別の構文がサポートされています。 詳細は、 制御構造に関する別の構文を参照ください。

<?phpswitch ($i):    case 0:        echo "iは0に等しい";        break;    case 1:        echo "iは1に等しい";        break;    case 2:        echo "iは2に等しい";        break;    default:        echo "iは0でも1でも2でもない";endswitch;?>

case の最後はコロンではなくセミコロンとすることもできます。たとえば次のようになります。

<?phpswitch($beer){    case 'ツボルグ';    case 'カールスバーグ';    case 'ハイネケン';        echo 'いいっすねぇ';    break;    default;        echo 'ほかのを選んでみませんか?';    break;}?>