catch
catch
ブロックは、スローされた例外にどのように反応するかを定義します。
catch
ブロックは、扱えるひとつ以上の例外またはエラー型を定義します。
そして、オプションで例外を代入できる変数も定義できます。
(PHP 8.0.0 より前のバージョンでは、この変数定義は必須でした)
スローされた例外またはエラーにマッチする最初の catch
ブロックが、そのオブジェクトを処理します。
さまざまな型の例外を捕捉するために
複数の catch
ブロックを使用することができます。
通常の実行時 (try
ブロック内で例外がスローされなかった
場合) は、catch
ブロック内は処理されず、それ以降から処理が続けられます。
catch
ブロックの中から例外を throw
する
(あるいは throw
しなおす) こともできます。
throw
し直さない場合、その catch
ブロックの後から処理が続けられます。
例外がスローされた場合、その命令に続くコードは実行されず、
PHP は最初にマッチする catch
ブロックを探します。
例外が捕捉されない場合、PHP は "Uncaught Exception ...
"
というメッセージとともに
致命的なエラー(fatal error)を発生させます。
ただし、set_exception_handler でハンドラが
定義されている場合を除きます。
PHP 7.1.0 以降では、catch
ブロック で 複数の例外を
パイプ文字 (|
) を使って指定できるようになりました。
これは、異なるクラス階層からの例外を同時に扱う必要がある場合に有用です。
PHP 8.0.0 以降では、キャッチされた例外に対応する変数はオプションになりました。
指定されない場合、catch
ブロックは実行されるものの、
スローされたオブジェクトへアクセスすることは出来ません。