章: 第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のより安全な進化版です。