例外(exceptions)
目次
PHP は、他のプログラミング言語に似た例外モデルを持っています。
PHP 内で例外がスローされ (throw
され)、それが
捕捉され (catch
され) ます。発生した例外を
捕捉するには、コードを try
ブロックで囲みます。
各 try
ブロックには、対応する catch
ブロックあるいは finally
ブロックが存在する必要があります。
例外がスローされ、現在の関数スコープに catch
ブロックがなかった場合、
その例外は、マッチする catch
ブロックが見つかるまで関数のコールスタックを "遡って" いきます。
その途中で見つかった全ての finally
ブロックが実行されます。
グローバルスコープに遡るまで全てのコールスタックを探しても、
マッチする catch
ブロックが見つからない場合は、
グローバルな例外ハンドラが設定されていない限り fatal error となり、
プログラムが終了します。
スローされるオブジェクトは、
Throwable のインスタンスでなければなりません。
それ以外のオブジェクトをスローしようとすると
PHP の fatal error が発生します。
PHP 8.0.0 以降では、throw
キーワードは式として扱えるようになり、
様々なコンテクストで使えるようになりました。
これより前のバージョンでは、throw
は文であり、
それが現れる行でだけでしか使えませんでした。