概要
throw new Exception("ユーザーが見つからない") のようにメッセージで判別する書き方は手軽だが、catch 側が getMessage() の文字列を見て分岐するハメになって脆い。文言が少し変わるだけで分岐が壊れるし、IDE の補完も効かない。
PHP では class UserNotFoundError extends Exception {} のように Exception を継承するだけ で、自分のドメインに合った例外クラスを作れる。中身を実装する必要は無く、空クラスでも十分意味がある。なぜなら catch は クラスの型で分岐 するので、catch (UserNotFoundError $e) と書いた瞬間に「これはユーザー未存在のときだけ来る」と読み手にも IDE にも伝わるからだ。
実用では「予約済みエラー」「在庫不足」「権限不足」のように、アプリの世界 (ドメイン) が持つ概念に対して 1 クラスずつ 例外を切るのが定石。標準の RuntimeException / LogicException のどちらを継承するかも設計上のヒントになる (実行時に外部要因で起きるなら Runtime、コードの論理ミスなら Logic)。この章のドリルは最小例で「クラスを作って投げて型で受ける」ループを通す。
学習目標
class MyError extends Exception {}で独自の例外クラスを作れる- 自作クラスを
throwして、自作の型でcatchできる - ドメイン固有のエラーを 型で区別 できるようになる
ドリル
| no | 内容 |
|---|---|
| 01 | MyError extends Exception を作って投げて受ける |
📝 演習: ドリル 01 — カスタム例外を作って投げて受ける
問題
Exception を継承した MyError クラスを定義してください (中身は空でよい)。
try の中で throw new MyError("自作エラー") を投げ、
catch (MyError $e) の中で "caught: " . $e->getMessage() を 1 行出力してください。
期待される出力:
caught: 自作エラーヒント
class MyError extends Exception {}throw new MyError("自作エラー");catch (MyError $e) { ... }