PHP 速習チュートリアル

PHP switch 文

1. PHP switch 文

switch 文は、異なる条件に基づいて異なるアクションを実行するために使用されます。
多数のコードブロックの中から、実行すべき 1 つを選択する場合に switch ステートメントを使用すると効率的です。

1.1 switch 文のシンタックス(Syntax)

switch (式) {
  case ラベル1:
    // 実行されるコードブロック
    break;
  case ラベル2:
    // 実行されるコードブロック
    break;
  case ラベル3:
    // 実行されるコードブロック
    break;
  default:
    // どのケースにも一致しない場合に実行されるコードブロック
}

動作の仕組み:

  1. (expression)が一度だけ評価されます。
  2. 式の値が各 case の値と比較されます。
  3. 一致(マッチ)した場合、その case に関連付けられたコードブロックが実行されます。
  4. break キーワードに達すると、switch ブロックから抜けます。
  5. 一致するケースがない場合、default コードブロックが実行されます。

2. 実装例

以下は、お気に入りの色に応じてメッセージを出し分ける例です。

$favcolor = "red";

switch ($favcolor) {
  case "red":
    echo "あなたの好きな色は赤です!";
    break;
  case "blue":
    echo "あなたの好きな色は青です!";
    break;
  case "green":
    echo "あなたの好きな色は緑です!";
    break;
  default:
    echo "あなたの好きな色は、赤、青、緑のどれでもありません!";
}

3. PHP break キーワード

PHP が break キーワードに達すると、switch ブロック全体の実行を終了(脱出)します。
これにより、それ以降のコードの実行が停止し、他の case がテストされることもなくなります。

switch ブロックの最後のコードブロックには、必ずしも break を記述する必要はありません。そこでブロック自体が終了するためです。

       警告: 最後のケース以外で break ステートメントを省略し、そのケースがマッチした場合、式の結果が一致していなくても次のケースのコードブロックまで実行されてしまいます!(フォールスルー現象)

4. 例:break を省略した場合の挙動

case "red" から break を削除するとどうなるでしょうか?
$favcolor が "red" の場合、まず case "red" のコードが実行されますが、break がないため、そのまま case "blue" のコードブロックも実行されてしまいます。

$favcolor = "red";

switch ($favcolor) {
  case "red":
    echo "あなたの好きな色は赤です!";
    // break がないため、次の case も実行される
  case "blue":
    echo "あなたの好きな色は青です!";
    break;
  case "green":
    echo "あなたの好きな色は緑です!";
    break;
  default:
    echo "あなたの好きな色はどれでもありません!";
}

5. PHP default キーワード

default キーワードは、どの case にも一致しなかった場合に実行するコードを指定します。

5.1 例

どのケースにもマッチしない場合、default ブロックが実行されます:

$d = 4;

switch ($d) {
  case 6:
    echo "今日は土曜日です";
    break;
  case 0:
    echo "今日は日曜日です";
    break;
  default:
    echo "週末が待ち遠しいですね";
}

6. ケースの結合(Combining Cases)

複数の case で同じコードブロックを使用したい場合は、以下のようにケースを並べて記述できます。

6.1 例

各コードブロックに対して複数のケースを指定する例:

$d = 3;

switch ($d) {
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:  
    echo "平日が長く感じますね!";
    break;
  case 6:
  case 0:
    echo "週末が最高です!";
    break;
  default:
    echo "エラーが発生しました";
}