特定の種類の例外をスローすることをドキュメントに記載するインターフェイスメソッドがあります。そのメソッドの実装は、例外をスローするものを使用します。内部例外がキャッチされ、インターフェイスコントラクトによって宣言された例外がスローされます。ここに、よりよく説明するための小さなコード例を示します。これはPHPで書かれていますが、簡単に理解できます。
// in the interface
/**
* @return This method returns a doohickey to use when you need to foo
* @throws DoohickeyDisasterException
*/
public function getThatDoohickey();
// in the implementation
public function getThatDoohickey() {
try {
$SomethingInTheClass->doSomethingThatThrowsAnException();
} catch (Exception $Exc) {
throw new DoohickeyDisasterException('Message about doohickey failure');
}
// other code may return the doohickey
}
抽象化のリークを防ぐために、このメソッドを使用しています。
私の質問は次のとおりです。前の例外が抽象化をリークしているので、スローされた内部例外を渡すでしょうか?そうでない場合、前の例外のメッセージを単に再利用するのが適切でしょうか?抽象化が漏れている場合、なぜそれが起こると思うかについてのガイダンスを提供できますか?
明確にするために、私の質問には次のコード行への変更が含まれます
throw new DoohickeyDisasterException($Exc->getMessage(), null, $Exc);
file_not_found
file_not_found_exception