php - 捕获不工作以及如何取消设置异常处理程序

标签 php exception try-catch

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 bugthis bug .它们准确描述了您遇到的情况,定义自定义错误处理程序时无法捕获异常。

解决方法:

Fixed in 5.3 and HEAD, won't be backported to 5.2.

关于php - 捕获不工作以及如何取消设置异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2714342/

相关文章:

php - 空白/空搜索表单字段

javascript - Symfony JavaScript Assets 问题(双项目名称)

java - 未处理的异常 : java. io.IOException

java - Spring @Transaction注解和异常处理

c - 如何在 C 中重现 "2 No such file or directory"

php - PHP-错误报告而不关闭标签

php - 非常简单的jquery AJAX post问题

c++ - 在 try catch block 中返回 catch 是不是很糟糕?这是一个好习惯

java - Java 中静态方法的 try-catch 缓慢

java - 将打印行和文本添加到 FileWriter (writer.write)