【发布时间】:2017-04-18 06:29:33
【问题描述】:
[编辑 - 免责声明:这是一个非常糟糕的主意,请参阅实际解决方案的公认答案。]
我使用 set_exception_handler() 函数定义了我自己的异常处理程序。处理程序执行后,我需要脚本继续。有什么办法吗?
免责声明:我知道 try-catch 块,但我需要动态处理异常。每次调用 Clazz::foo() 都会指定自己的异常,这些异常应该被我的处理程序捕获。这就是我不能使用它的原因。
例子:
class Clazz {
private static $exceptions;
public static function foo(array $exceptions) {
set_exception_handler(array(__CLASS__, "exception_handler"));
self::$exceptions = $exceptions;
throw new RandomException;
echo "I need this to be printed!";
}
public static function exception_handler($exception) {
// process the exception in my way...
// if $exception in self::$exceptions than 1, else 2, fi
restore_exception_handler();
// continue in some way, like it has never happenned
}
}
【问题讨论】:
-
我不明白,你能说明你的需求吗?
-
这看起来你根本不懂异常。这只是个坏主意......
-
您可以设置事件中介对象,将其注入自定义异常处理程序类,注册自定义异常处理程序类的可调用对象
set_exception_handler并拥有一个完整的侦听器链来侦听未捕获的异常事件。虽然我不确定这会是一个多么好的主意...... -
你苦苦挣扎的原因是这不是异常的工作方式,因为这不是异常的意思。停止尝试以这种方式使用它们。只需调用一些函数即可。
-
我很乐意毫无例外地处理它。但是, foo() 函数应该启动自定义代码(来自库),它会抛出异常,我无法更改它。
标签: php exception-handling callback