catch 不工作,因为使用 set_exception_handler()
安装了异常处理程序我需要“catch”才能工作,所以我想我需要以某种方式取消设置异常处理程序。 set_exception_handler(NULL) 之类的东西不起作用。
对如何取消设置异常处理程序有任何想法吗?
function my_exception_handler($exception) {
error_log("caught exception: " . $exception->getMessage() );
}
set_exception_handler("my_exception_handler");
// QUESTION: how does on unset it ?
//set_exception_handler(NULL);
try {
throw new Exception('hello world');
error_log("should not happen");
} catch(Exception $e) {
error_log("should happen: " . $e->getMessage());
}
实际输出:
捕捉到异常:hello world
期望的输出:
应该发生:hello world
最佳答案
restore_exception_handler
,链接自 set_exception_handler
的手动条目.
顺便说一句,这些异常处理程序应该只在异常未被捕获时才起作用。未捕获。 catch
block 应始终具有优先权。
阅读一点关于 Exceptions 的评论页面将您带到 this bug和 this bug .它们准确描述了您遇到的情况,定义自定义错误处理程序时无法捕获异常。
解决方法:
Fixed in 5.3 and HEAD, won't be backported to 5.2.
关于php - 捕获不工作以及如何取消设置异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2714342/