1

考虑以下代码,我想在其中抛出一个新异常来包装我刚刚捕获的“先前”异常。

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

在某些时候,在构造新异常时,我想将两个异常作为“$previous”传入。

但在本机上,只支持一个“先前的异常”。

到目前为止我能想到的选项:

  • 创建我自己的异常类,它接受一个额外的“先前”异常。但是然后呢?将其存储为私有财产?还是公开的?带存取器?我将如何制作调用代码来关心额外的信息?
  • 当然,我可以只写日志,然后丢弃一个或两个异常。但这不是这个问题的重点。
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 回答