第10章 オブジェクト指向構文 / 第3回 模擬試験
PHPの例外処理に関する次の記述のうち、誤っているものはどれか。
例外は`throw`命令でスローする。
`try`ブロック内で発生した例外は`catch`ブロックで捕捉できる。
`finally`ブロックは、例外の有無に関わらず必ず実行される。
`catch`ブロックは1つの`try`につき1つしか記述できない。
正解
解説
1つの`try`ブロックに対して、捕捉したい例外の種類ごとに複数の`catch`ブロックを記述できます(上から順に評価され、最初にマッチした`catch`が実行されます)。「1つしか記述できない」という記述は誤りです。
他の選択肢が正しい理由は次の通りです。
・例外を意図的に発生させるには`throw new 例外クラス(...)`のように`throw`命令を使います。
・`try`ブロック内で発生した例外は、対応する型を指定した`catch`ブロックで捕捉できます。
・`finally`ブロックは、例外が発生してもしなくても必ず実行されます。後始末処理を書くのに向いています。
例:
```
try {
// 何らかの処理
} catch (InvalidArgumentException | TypeError $e) {
// PHP8: 複数の型を | でまとめて1つのcatchに書ける
} catch (Exception $e) {
// それ以外の例外
} finally {
// 常に実行される後始末処理
}
```
(参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.7節 例外処理 p.541〜554)