为什么不';难道所有致命错误都可以在PHP7中捕获吗?

为什么不';难道所有致命错误都可以在PHP7中捕获吗?,php,exception,fatal-error,Php,Exception,Fatal Error,从PHP5到PHP7,语法错误不再是致命错误,而是可以捕获的可丢弃的异常。然而,一些致命错误,如“未找到类”,在PHP7中仍然是致命的。为什么没有将所有致命错误转换为可丢弃的 例如: try { include "file_with_syntax_error.php"; } catch (Throwable $ex) { // Do something } 但是 编辑:错误报告中有一条评论: 一般来说,PHP7.0.0已经完成了,其中 合理且可能,请参见 我认为这个问题没有明确的答案

从PHP5到PHP7,语法错误不再是致命错误,而是可以捕获的可丢弃的异常。然而,一些致命错误,如“未找到类”,在PHP7中仍然是致命的。为什么没有将所有致命错误转换为可丢弃的

例如:

try {
  include "file_with_syntax_error.php";
} catch (Throwable $ex) {
  // Do something
}
但是

编辑:错误报告中有一条评论:

一般来说,PHP7.0.0已经完成了,其中 合理且可能,请参见


我认为这个问题没有明确的答案,所以我投票决定以基于意见的方式结束。请记住,您始终可以使用
文件\u exists()
或其他方法来检查有效性,并手动抛出
Throwable
Error
。简而言之,目前并非所有致命错误都会产生可丢弃的
,因此无法捕获。就我所知,这取决于引擎的问题,而不是具体的设计决策。@xORF或者,实现ParseError等的开发人员可能知道答案。:)对于这种特殊情况,原因是不直接生成require/include错误,而是出于任何原因,通过“zend message dispatcher”机制生成。这还没有转换为throw。我想我误解了这个问题,你这里说的不是“未找到文件”致命错误,而是其他错误。如果这是指一般的编译器错误,那么基本上是因为这需要通过整个编译器处理线程错误。此外,编译的某些部分(如早期绑定)具有明显的后果,必须撤消或延迟。为了值得怀疑的利益,这需要做很多工作。
try {
  include "file_with_namespace_error.php";
} catch (Throwable $ex) {
  // Won't work
}