PHPのswitch文の書き方を紹介します。
switch文を使用して処理を分岐させる
変数の値ごとに実行するコードを分岐させる場合はswitch文を使用します。変数の値が"Red"ならばこの処理、"Yellow"ではこの処理、"Blue"はこの処理というように、変数の値と指定された値が複数あり、それらと比較、一致した場合に、実行するようなプログラムを書く場合に便利なのがswtich文です。if文でも同様のコードは書けますが読みにくいコードになる場合があります。
上のような例をif文を使用して書くと以下のようなコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $signal = "Red"; if ( $signal == "Red" ) { echo "stop\n"; // 処理1 } elseif ( $signal == "Yellow" ) { echo "check and stop\n"; // 処理2 } elseif ( $signal == "Blue" ) { echo "walk\n"; // 処理3 } ?> |
上のコードの実行結果は以下のようになります。
1 |
stop |
上記のコードは間違いではありません。しかし、場合によっては非常に読みにくいコードとなる場合もあります。このような場合にはswitch文を使うと簡潔に書くことがきます。
switch文の書式は以下のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
switch ( 変数 ) { case 値1: 変数が値1と同じだった場合のコード; break; case 値2: 変数が値2と同じだった場合のコード; break; case 値3: 変数が値3と同じ場合のコード; break; default: 変数が上記いずれの値とも同じでない場合の処理; } |
switch文ではまず、指定された変数値とcase後の値を比較していきます。そして、一致する値があった場合にその後に記述されたコードを次のbreak文まで実行し続けて、switch文は終了します。
defaultの後のコードは、変数がcase後に記述されたどの値とも一致しなかった場合に実行するコードを書きます。defaultは省略することも可能です。
実際の例を以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php $product= "A製品"; switch ( $product ) { case "A製品": echo "関東工場に出荷です\n"; break; case "B製品": echo "東北工場に出荷です\n"; break; case "C製品": echo "関西工場に出荷です\n"; break; case "D製品": echo "九州工場に出荷です\n"; break; } ?> |
上のプログラムの実行結果は以下のようになります。
1 |
関東工場に出荷です |
また、複数の変数値で同じ処理をしたい場合は以下のように書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php $product= "B製品"; switch ( $product ){ case "A製品": case "B製品": echo "関東工場に出荷です\n"; break; case "C製品": echo "関西工場に出荷です\n"; break; case "D製品": echo "九州工場に出荷です\n"; break; } ?> |
上のプログラムの実行結果は以下のようになります。
1 |
関東工場に出荷です |
変数「product」の値が「A製品」「B製品」のいずれに一致した場合も「echo "関東工場に出荷です";」を実行します。上の例では、変数の「pruduct」がA製品、B製品どちらの場合でも「関東工場に出荷です」と表示されます。
break文が記述しなかった場合の動作
break文が省略した場合、次のcaseのコードも引き続き実行されてしまいます。
実際にbreak文を省略した例を以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $product = "B製品"; switch ( $product ) { case "A製品": echo "関東工場に出荷です\n"; break; case "B製品": echo "東北工場に出荷です\n"; case "C製品": echo "関西工場に出荷です\n"; break; case "D製品": echo "九州工場に出荷です\n"; break; } ?> |
上の実行結果は以下のようになります。
1 2 |
東北工場に出荷です 関西工場に出荷です |
「B製品」に一致したときは「echo "東北工場に出荷です";」のみが実行されます。しかし、break文がないため次のcaseのコードに移行し、「C製品」に一致した場合にのみ実行される「echo "関西工場に出荷です";」が続いて実行されてしまいます。そして次の行でbreak文があるのでswitch文が終了します。
上記のように、switch文はif文のようにブロック({ })の中でのみ実行されるのではなく、break文の記述が見つかるかswitch文の最後までコードを実行し続けるという特性があります。
このようにswitch文はこのように便利な反面、上述したようにミスも起こりやすいです。このbreak文の記述忘れで、次のcaseのコードに移ってしまい、予期しない処理が実行されてしまうので注意が必要です。