将PHP错误转换为异常

时间:2012-11-25 17:45:55

标签: php exception exception-handling

我编写了错误处理类,将所有错误划分为正常错误(通知,警告,......)和关键错误。

现在我发现将所有错误转换为异常是一种很好的做法。它也会缩短我的代码。

但是,我不确定如何处理这个......

  1. 是否存在不会停止脚本执行的异常,以及有哪些异常?如果没有...如何区分转换后的错误?
  2. 通过调用set_error_handler()并在其中抛出新的ErrorException()来完成将错误转换为异常......下一步是什么? set_exception_handler()是自动调用的吗?

4 个答案:

答案 0 :(得分:3)

  1. 捕获的异常不会停止您的脚本,所有未捕获的脚本
  2. 不,set_exception_handler()不会自动调用,如果您愿意,可以执行此操作。

    您在使用set_exception_handler()设置的异常处理程序在异常未被捕获后被调用,它是在脚本终止之前调用的最后一段代码。确保它不会导致错误/异常,否则会导致错误。

答案 1 :(得分:2)

任何未捕获的异常都将停止执行您的脚本。

  

抛出异常时,语句后面的代码不会   执行,PHP将尝试找到第一个匹配的catch块。   如果未捕获到异常,则会发出PHP致命错误   除非已定义处理程序,否则为“未捕获的异常...”消息   使用set_exception_handler()。

请参阅docs about this

对于set_exception_handler() - 它不会自动调用,但它是您对发生的问题作出反应的最后手段

  

如果未捕获到异常,则设置默认异常处理程序   在try / catch块中。执行将在之后停止   调用exception_handler。

答案 2 :(得分:2)

  
      
  1. 是否存在不会停止脚本执行的异常,以及有哪些异常?如果没有...如何区分转换后的错误?
  2.   

如果脚本被捕获,则异常不会停止脚本执行。识别已转换的错误:

try {
    // ...
} catch (ErrorException $e) {
    // converted error (probably)
} catch (Exception $e) {
    // another kind of exception; this basically catches all
}

或者:

function handle_exception(Exception $e)
{
    if ($e instanceof ErrorException) {
        // converted error (probably)
    } else {
        // another kind of exception
    }
}
set_exception_handler('handle_exception');

请注意,ErrorException可以被任何代码抛出,但它只是为了转换set_error_handler()注册函数中的常规错误。

  
      
  1. 通过调用set_error_handler()并在其中抛出新的ErrorException()来完成将错误转换为异常......下一步是什么? set_exception_handler()是自动调用的吗?
  2.   

如果您的错误处理函数中抛出的ErrorException没有被代码中的任何其他位置捕获,则将调用已注册的异常处理程序(使用set_exception_handler()设置)。

答案 3 :(得分:0)

请注意,您只能将警告转换为异常,因为错误处理程序无法运行,所以无法将错误转换为异常。

set_error_handler(function ($severity, $message, $file, $line) {
  echo 'You will never see this.'
});

// Provoke an error
function_that_does_not_exist();

可以使用关闭功能“捕获”它们,但这超出了问题的范围。