PHPのswitch文の書き方

PHPのswitch文の書き方を紹介します。

switch文を使用して処理を分岐させる

変数の値ごとに実行するコードを分岐させる場合はswitch文を使用します。変数の値が"Red"ならばこの処理、"Yellow"ではこの処理、"Blue"はこの処理というように、変数の値と指定された値が複数あり、それらと比較、一致した場合に、実行するようなプログラムを書く場合に便利なのがswtich文です。if文でも同様のコードは書けますが読みにくいコードになる場合があります。

上のような例をif文を使用して書くと以下のようなコードになります。

<?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

}
?>

上のコードの実行結果は以下のようになります。

stop

上記のコードは間違いではありません。しかし、場合によっては非常に読みにくいコードとなる場合もあります。このような場合にはswitch文を使うと簡潔に書くことがきます。

switch文の書式は以下のとおりです。

switch ( 変数 ) {
case 値1:
    変数が値1と同じだった場合のコード;
    break;
case 値2:
    変数が値2と同じだった場合のコード;
    break;
case 値3:
    変数が値3と同じ場合のコード;
    break;
default:
    変数が上記いずれの値とも同じでない場合の処理;
}

switch文ではまず、指定された変数値とcase後の値を比較していきます。そして、一致する値があった場合にその後に記述されたコードを次のbreak文まで実行し続けて、switch文は終了します。

defaultの後のコードは、変数がcase後に記述されたどの値とも一致しなかった場合に実行するコードを書きます。defaultは省略することも可能です。

実際の例を以下に示します。

<?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;
}
?>

上のプログラムの実行結果は以下のようになります。

関東工場に出荷です

また、複数の変数値で同じ処理をしたい場合は以下のように書きます。

<?php
$product= "B製品";
switch ( $product ){
case "A製品":
case "B製品":
    echo "関東工場に出荷です\n";
    break;

case "C製品":
    echo "関西工場に出荷です\n";
    break;

case "D製品":
    echo "九州工場に出荷です\n";
    break;
}
?>

上のプログラムの実行結果は以下のようになります。

関東工場に出荷です

変数「product」の値が「A製品」「B製品」のいずれに一致した場合も「echo "関東工場に出荷です";」を実行します。上の例では、変数の「pruduct」がA製品、B製品どちらの場合でも「関東工場に出荷です」と表示されます。

break文が記述しなかった場合の動作

break文が省略した場合、次のcaseのコードも引き続き実行されてしまいます。

実際にbreak文を省略した例を以下に示します。

<?php
$product = "B製品";
switch ( $product ) {
case "A製品":
    echo "関東工場に出荷です\n";
    break;

case "B製品":
    echo "東北工場に出荷です\n";

case "C製品":
    echo "関西工場に出荷です\n";
    break;

case "D製品":
    echo "九州工場に出荷です\n";
    break;
}
?>

上の実行結果は以下のようになります。

東北工場に出荷です
関西工場に出荷です

「B製品」に一致したときは「echo "東北工場に出荷です";」のみが実行されます。しかし、break文がないため次のcaseのコードに移行し、「C製品」に一致した場合にのみ実行される「echo "関西工場に出荷です";」が続いて実行されてしまいます。そして次の行でbreak文があるのでswitch文が終了します。

上記のように、switch文はif文のようにブロック({ })の中でのみ実行されるのではなく、break文の記述が見つかるかswitch文の最後までコードを実行し続けるという特性があります。

このようにswitch文はこのように便利な反面、上述したようにミスも起こりやすいです。このbreak文の記述忘れで、次のcaseのコードに移ってしまい、予期しない処理が実行されてしまうので注意が必要です。


イベント