我使用以下函数来设置我自己的错误处理程序和异常处理程序。错误处理程序中抛出的PHP异常不会被异常处理程序捕获
set_error_handler
set_exception_handler
错误处理程序将错误转换为异常。 (抛出一个新的异常)
但是这些异常不会被我自己的异常处理程序捕获。
错误处理程序例如:
function errorHandler($errno, $errstr, $errfile, $errline, $errcontext) {
throw new Exception("this was an error");
}
异常处理程序例如:
function exceptionHandler($e){
// don't get here when exception is thrown in error handler
Logger::logException($e);
}
(我认为这不能无论如何工作)
如若这项工作?
或者有人可以解释为什么它不能工作?
编辑:
我做了一些测试,它应该工作。在抛出的ErrorHandler
例外越来越被的ExceptionHandler 并在触发的ExceptionHandler陷入错误越来越被的ErrorHandler
仅供参考处理。
我的问题在其他地方
编辑:
我还没有发现,为什么在我的ErrorHandler抛出的异常没有被我抓到exceptionHandler的。
例如,当我在代码中有这个地方。
trigger_error("this is an error"); // gets handled by the errorHandler
throw new Exception("this is an exception"); // gets handler by the exceptionHandler
错误被errorHandler处理,但errorHandler中引发的异常不会被exceptionHandler处理。
但是,如果我在触发错误的同一位置抛出异常,则此异常将由异常处理程序处理。
(希望这是某种可以理解我的意思)
我无言以对这里。 任何想法,我必须寻找问题?
尽管我不再在解决这个问题,但您提供了正确的答案并不错。不知何故,这是有道理的,但我没有想到它。谢谢你的答案。 – superbly 2013-10-11 11:30:45
看起来像5.5中修复 - https://3v4l.org/K9NAR – 2015-11-14 16:34:46
,这是没有意义的。为什么PHP应该决定退出E_ERROR,甚至没有达到它? – emfi 2017-07-11 09:58:13