1

次のコードを検討してください。新しい例外をスローして、キャッチした「前の」例外をラップします。

try {
  doSomething();
}
catch (SomethingException $eSomething) {
  try {
    rollback();
  }
  catch (RollbackException $eRollback) {
    throw new SomethingRollbackException('Copying failed, rollback failed.', null, $eSomething, $eRollback);
  }
}

ある時点で、新しい例外を作成するときに、「$previous」として渡したい 2 つの例外があります。

ただし、ネイティブでは、「前の例外」は 1 つしかサポートされていません。

これまでに考えられるオプション:

  • 追加の「前の」例外を受け入れる独自の例外クラスを作成します。しかし、その後は?私有地として保管?それとも公開?アクセサ付き?追加情報を気にする呼び出しコードを作成するにはどうすればよいですか?
  • もちろん、ログに書き込み、1 つまたは両方の例外を破棄することもできます。しかし、これはこの質問のポイントではありません。
4

1 に答える 1

2

追加の「前の」例外を受け入れる独自の例外クラスを作成します。- はい、言いましょうSomethingRollbackException

私有地として保管?- はい、でも好みの問題です

アクセサ付き?- はい、上記を参照してください

追加情報を気にする呼び出しコードを作成するにはどうすればよいですか? - このようなもの:

if ($exception instanceof SomethingRollbackException) {
    // at this point you know $exception has 2 previous exceptions
}

また

try {
    // ....
} catch(SomethingRollbackException $e) {
    // at this point you know $exception has 2 previous exceptions 
}
于 2016-02-23T18:11:57.210 に答える