我对这些术语及其在PHP中的确切含义/处理感到有点困惑:
异常 可以像这样定义:
当方法中发生错误时,该方法会创建一个对象和 把它交给运行时系统。该对象称为异常 object,包含有关错误的信息,包括其类型和 发生错误时程序的状态。创建一个 调用异常对象并将其交给运行时系统 抛出异常。
可以捕捉和处理例外情况。
致命错误 可以像这样定义:
致命错误是严重错误 - 例如,实例化 不存在的类的对象,或调用不存在的函数。 这些错误导致脚本和PHP的立即终止 默认行为是在用户发生时将其显示给用户。
不一定会发现致命错误(他们不会抛出常见的例外情况),否则就不会有更具体的 Catchable Fatal Error 。
但 Catchable Fatal Error 与普通的 例外 有什么不同?是否处理相同?可捕获的致命错误是否是特定类型的异常?
答案 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) {
}