第11回: switch文 — 複数の固定値を分岐するときの定番

章: 第1章: 文法の土台

elseif が5行以上続いていたら、switch文の出番かもしれません

「ユーザーのロールに応じて表示を変える」「ステータスコードに応じてメッセージを出す」——固定値との比較が続く分岐は、switch文を使うと意図が明確になります。if-elseifの羅列より読みやすく、後からケースを追加しやすい構造です。

まずコードを動かしてみる


<?php
$role = 'editor';
switch ($role) {
    case 'admin': echo '管理者'; break;
    case 'editor': echo '編集者'; break;
    default: echo '閲覧者';
}

case で各値を指定し、break で処理を終了します。どの case にも一致しない場合は default が実行されます。

switch文 vs if-elseif の使い分け

switch文 if-elseif
向いている場面 同一変数と固定値の比較 範囲比較・複合条件
可読性 ケースが多いと見やすい ケースが少ないと見やすい
型比較 ==(緩い比較) 比較演算子を選べる
fall-through break 省略で連続実行できる できない

チェックポイント: switch文の比較は ==(緩い比較)を使います。型まで厳密に比較したいときは PHP 8 の match 式を使いましょう。

break 忘れに注意


<?php
$role = 'editor';
switch ($role) {
    case 'admin': echo '管理者'; // breakなし → 次のcaseにfall-through
    case 'editor': echo '編集者'; break;
    default: echo '閲覧者';
}
// 出力: 管理者編集者 ← adminのbreak忘れで両方実行される

良い例(各caseにbreakを明示)


<?php
$role = 'admin';
switch ($role) {
    case 'admin':
        echo '管理者';
        break;
    case 'editor':
        echo '編集者';
        break;
    default:
        echo '閲覧者';
}

まとめ & 次のステップ

  • switch文は同一変数と複数の固定値を比較する場面に向いている
  • case の末尾には必ず break を書く(忘れるとfall-throughが発生)
  • どの条件にも一致しない場合は default で処理する
  • switch は ==(緩い比較)を使うため、型の違いに注意
  • ケースが多い・範囲比較が必要なときは if-elseif を使う

次回は match式を学びます。PHP 8以降で使える、switchのより安全な進化版です。

Related Articles