概要

throw new Exception("ユーザーが見つからない") のようにメッセージで判別する書き方は手軽だが、catch 側が getMessage() の文字列を見て分岐するハメになって脆い。文言が少し変わるだけで分岐が壊れるし、IDE の補完も効かない。

PHP では class UserNotFoundError extends Exception {} のように Exception を継承するだけ で、自分のドメインに合った例外クラスを作れる。中身を実装する必要は無く、空クラスでも十分意味がある。なぜなら catch は クラスの型で分岐 するので、catch (UserNotFoundError $e) と書いた瞬間に「これはユーザー未存在のときだけ来る」と読み手にも IDE にも伝わるからだ。

実用では「予約済みエラー」「在庫不足」「権限不足」のように、アプリの世界 (ドメイン) が持つ概念に対して 1 クラスずつ 例外を切るのが定石。標準の RuntimeException / LogicException のどちらを継承するかも設計上のヒントになる (実行時に外部要因で起きるなら Runtime、コードの論理ミスなら Logic)。この章のドリルは最小例で「クラスを作って投げて型で受ける」ループを通す。

学習目標

ドリル

no 内容
01 MyError extends Exception を作って投げて受ける

演習: ドリル 01 — カスタム例外を作って投げて受ける

問題

Exception を継承した MyError クラスを定義してください (中身は空でよい)。

try の中で throw new MyError("自作エラー") を投げ、 catch (MyError $e) の中で "caught: " . $e->getMessage() を 1 行出力してください。

期待される出力:

caught: 自作エラー

ヒント

この章を AI に聞く

  1. 「ch06 — カスタム例外」のつまずきやすいポイントを、初学者向けに3つ教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

  2. 「ch06 — カスタム例外」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    💬 ChatGPT 📘 Claude ✨ Gemini

  3. 「ch06 — カスタム例外」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

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

ch06 — カスタム例外」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE