第10章 オブジェクト指向構文 / 第4回 模擬試験
PHPの独自の例外クラスに関する次の記述のうち、正しいものはどれか。
独自の例外クラスは、`Exception`クラス(またはその子クラス)を継承して定義する。
正解
独自の例外クラスは、`Exception`クラスと無関係に自由に定義してよい。
独自の例外クラスは`throw`することができない。
PHPでは独自の例外クラスを作成することはできない。
解説
独自の例外クラスを作りたい場合は、`class MyException extends Exception { ... }`のように、PHP標準の`Exception`クラス(またはその子孫クラス)を継承して定義します。こうすることで`throw`や`catch`の対象として扱えるようになります。
他の選択肢が誤りである理由は次の通りです。
・例外として`throw`できるのは`Throwable`インターフェイス(`Exception`または`Error`の系譜)を実装したクラスに限られます。`Exception`と無関係に自由なクラスを定義しても、それを`throw`することはできません。
・`Exception`を継承したクラスは、通常のクラスと同様に`throw new MyException('メッセージ');`のように`throw`できます。
・PHPでは独自の例外クラスを自由に作成できます(組み込みの例外クラスを継承して、より具体的な例外を作るのもよく使われる手法です)。
例:
```
class InsufficientBalanceException extends Exception {}
function withdraw(float $balance, float $amount): float {
if ($amount > $balance) {
throw new InsufficientBalanceException('残高が不足しています');
}
return $balance - $amount;
}
```
(参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.7.6節 独自の例外クラス p.552〜554)