为什么php7在需要失败时会抓住Throwable?

时间:2017-09-25 18:53:12

标签: php php-7

我试图捕获一个必需致命错误(https://3v4l.org/5MV3I):

try {
    require("foo");
}
catch (Throwable $e) {
    print_r($e);
}

但是脚本在所有php版本中都会死掉:

Warning: require(foo): failed to open stream: No such file or directory in /in/5MV3I on line 4

Fatal error: require(): Failed opening required 'foo' (include_path='.:') in /in/5MV3I on line 4

Process exited with code 255.

文档说(http://php.net/manual/en/function.require.php):

  

...除非失败,否则还会产生致命的E_COMPILE_ERROR级错误。

哪些类型的php7致命错误可以捕获,哪些不是?

1 个答案:

答案 0 :(得分:0)

如果您使用" require()"包含一个文件。你需要它。如果它不存在,则以编译错误结束。然后PHP中止。我们的想法是,您对关键文件使用require。如果缺少那些,它会立即中止。

如果你想要抓住某些东西,你必须选择" include()"。在这里你可以很容易地获得成功:

$includeResult = include("foo");
if (!$includeResult) {
    // you will land here, if include did not work.
}