PHP:异常与可捕获的致命错误有什么区别?

时间:2018-04-05 14:53:02

标签: php exception exception-handling try-catch fatal-error

我对这些术语及其在PHP中的确切含义/处理感到有点困惑:

异常 可以像这样定义:

  

当方法中发生错误时,该方法会创建一个对象和   把它交给运行时系统。该对象称为异常   object,包含有关错误的信息,包括其类型和   发生错误时程序的状态。创建一个   调用异常对象并将其交给运行时系统   抛出异常。

可以捕捉和处理例外情况。

致命错误 可以像这样定义:

  

致命错误是严重错误 - 例如,实例化   不存在的类的对象,或调用不存在的函数。   这些错误导致脚本和PHP的立即终止   默认行为是在用户发生时将其显示给用户。

不一定会发现致命错误(他们不会抛出常见的例外情况),否则就不会有更具体的 Catchable Fatal Error

Catchable Fatal Error 与普通的 例外 有什么不同?是否处理相同?可捕获的致命错误是否是特定类型的异常?

1 个答案:

答案 0 :(得分:1)

  

不一定会发现致命错误(他们不会抛弃通常情况   例外)

在版本7之前,就是这种情况。用于阻止脚本死亡的致命错误。但是,从版本7开始,它们现在被呈现为可捕获的异常。这使您可以从非常重要的问题中优雅地恢复。

  

然而,可捕捉致命错误与正常情况有何不同?   异常?

它们都实现了Throwable,但具有不同的锚类:

Throwable
    Error
        ParseError
        ...
    Exception
        RuntimeException
        ...
  

是否处理相同?

是的,你可以抓住它们,就像例外一样。

  

是一个致命的致命错误a   特定类型的例外与否?

取决于您的语义。一个可捕获的致命错误是一个例外,但如果你理解我的意思,它不是Exception。你可以这样区分;

// "traditional" exceptions
try {
    throw new Foo();
} catch (Exception $e) {
}

// v7 catchable fatal errors
try {
    $not_an_object->not_a_method();
} catch (Error $e) {
}

// both
try { 
} catch (Throwable $e) {
}