我有一个带有异常处理程序的脚本。在异常后脚本退出之前,此异常处理程序会清理几个连接。
我想从这个异常处理程序中重新抛出异常,以便它由 PHP 自己的最后手段异常处理程序处理,其中错误被写入 PHP 的错误日志,或者任何默认值,如 PHP 中配置的那样.ini.
不幸的是,这似乎不太可能,如下所述:
http://www.php.net/manual/en/function.set-exception-handler.php#68712
Will cause a Fatal error: Exception thrown without a stack frame
是否有另一种方法可以将错误冒泡到堆栈中,以便 PHP 在我的异常处理程序完成清理后处理它?</p>
最佳答案
您不能从异常处理程序中重新抛出,但是,您可以在其他地方抛出。例如,您可以通过将事物封装到它自己的类中,然后使用 __destruct()
函数(PHP 5.3,Demo),将重新抛出与处理程序分离:
<?php
class ExceptionHandler
{
private $rethrow;
public function __construct()
{
set_exception_handler(array($this, 'handler'));
}
public function handler($exception)
{
echo "cleaning up.\n";
$this->rethrow = $exception;
}
public function __destruct()
{
if ($this->rethrow) throw $this->rethrow;
}
}
$handler = new ExceptionHandler;
throw new Exception();
将其放入我的错误日志中:
[29-Oct-2011 xx:32:25] PHP Fatal error: Uncaught exception 'Exception' in /.../test-exception.php:23
Stack trace:
#0 {main}
thrown in /.../test-exception.php on line 23
关于php - 在异常处理程序中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7856173/