somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【php】例外の発生履歴まで伝播する

仕事で独自の例外を作成しようとしたときに気づいたのでメモです。

タイトルの機能は5.3からの新機能です。今までは、例外の生成時にメッセージとコードを決定できましたが、事前に発生した例外を引数として渡すことができるようになりました。

例外情報の欠落

try~catchが入れ子になっていて、最終的に例外を処理する場所に渡すためには、throwしてあげる必要があります。

  1. catchした例外をthrowする
  2. catchした例外ではなく新たな例外をthrowする

1つ目の場合は、一番最初に起こった例外の履歴を持っていますので、最終的にcatchしたときに失う情報はありません。

しかし、2つ目の場合、最終的にcatchする場所から見ると情報が欠落しています。そのため、それまでの情報を見たいときには、例外を新たに生成する部分でトレースログを出力しておく必要があります。5.3からは、事前に発生した例外の履歴を保持するようにな仕組みができたので、渡しておけば大丈夫ですね。

参考