PHP:抛出多个原始/先前例外的异常?

时间:2016-02-23 17:36:05

标签: php exception exception-handling try-catch rethrow

考虑以下代码,我想抛出一个新的异常来包装" previous"我抓到的例外情况。

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

在某些时候,我有两个例外情况,我希望在构建新例外时以#34; $ previous"传递。

但在本地,只有一个"之前的例外"得到支持。

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

  • 创建我自己的异常类,接受额外的"之前的"例外。但那又怎样?把它存放为私人财产?还是公开的?有一个存取器?如何使调用代码关注额外信息?
  • 当然我可以写入日志,并丢弃一个或两个例外。但这不是这个问题的重点。

1 个答案:

答案 0 :(得分: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 
}