概要

ある変数の値によって 5 通り 10 通りと多くの分岐をしたい場面、if / elseif / elseif / ... をひたすら並べると縦に長くなって読みにくい。これを「ある値を、各候補と等しいか順に照合する」と意図を絞った形で書けるのが switch 文だ。曜日番号 1〜7 を曜日名に変換する、コマンド文字列でハンドラを振り分ける、ステータスコード別にメッセージを出す — こういう「1 つの値に対する多分岐」で読みやすさが大きく違う。

PHP の switch絶対に外せない約束 が、各 case の最後に break を書くこと。PHP は C 言語と同じく フォールスルー仕様 で、break がないと一致した case から下の case の中身まで連続実行してしまう。これは意図的に複数 case で同じ処理を共有したい時に使えるが、書き忘れによる連続実行は超頻出バグ なので、毎回 break を書く癖を体に刷り込む。どの case にも当たらなかったときに通る default も合わせて覚えておく。

PHP 8 からは switch の代替として match が追加された。match は (1) 緩い比較 == ではなく 厳密比較 === を使う、(2) break 不要 (フォールスルーしない)、(3) 式なので値を返せる という違いがあり、ほとんどの場面で match の方が安全で読みやすい。とはいえ既存コードや古い PHP では switch が現役なので、まずは switch の挙動を正しく理解しておくのが本章の目的。

学習目標

ドリル

no 内容
01 数字 1-7 を曜日名に変換
02 grade (A/B/C/D) を合格/不合格に振り分け

演習: ドリル 01 — 数字を曜日名に変換

問題

標準入力で 1〜7 の整数を 1 行受け取り、 対応する曜日名を出力してください。1-7 以外なら unknown を出力します。

入力 出力
1 Mon
2 Tue
3 Wed
4 Thu
5 Fri
6 Sat
7 Sun
その他 unknown

判定には switch 文を使うこと。

入力例:

3

期待される出力:

Wed

ヒント

演習: ドリル 02 — grade を合格/不合格に振り分け

問題

標準入力で grade を 1 行受け取ります。値は A B C D のいずれかです。 C 以上 (= A / B / C) なら passD なら fail を出力してください。

判定には switch 文を使うこと。 ヒント: ABC で同じ処理にしたい場合は、case "A":case "B": を続けて書いて break を省略する書き方が使えます。

入力 出力
A pass
B pass
C pass
D fail

入力例:

B

期待される出力:

pass

ヒント

この章を AI に聞く

  1. 「ch05 — switch 文」のつまずきやすいポイントを、初学者向けに3つ教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

  2. 「ch05 — switch 文」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    💬 ChatGPT 📘 Claude ✨ Gemini

  3. 「ch05 — switch 文」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

🎉 受講お疲れさまでした!

ch05 — switch 文」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE