function doSomething()
{
try {
doSomeNastyStuff() // throws Exception
} catch(\Exception $e) {
if ($this->errorHandler) {
call_user_func($e);
} else {
throw($e);
}
}
}
但是,catch块不起作用.堆栈跟踪向我显示在doSomeNastyStuff()行发生的错误.问题出在哪儿?
解决方法:
问题是,你正在重新抛出你的异常.堆栈跟踪是Exception实例的一部分,此时会记录,创建异常.您可以通过获取堆栈跟踪
$e->getTrace(); // Exception $e
当你在你的代码中重新抛出异常时,它仍然记录了旧的堆栈跟踪,并且这会欺骗你的框架向你展示,异常实际发生在doSomeNastyStuff()行,并且看起来catch不起作用.
因此,最好以下列方式重新抛出异常:
/** instead of throw($e) do */
throw new \Exception("Unhandled exception", 1, $e);
从PHP5.3开始,Exception构造函数具有可选的第三个参数$prevIoUs,正好用于此目的.然后,您可以使用$e-> getPrevIoUs()获取上一个例外;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。