第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)

あわせて読みたい解説記事