PHP 7 中的错误未被抛出

errors in PHP 7 not being thrown

据我了解,根据 http://php.net/manual/en/language.errors.php7.php,现在应该抛出 PHP7 中的错误。但在我自己的测试中,情况似乎并非如此:

<?php

error_reporting(E_ALL);

try {
    echo $a[4];
} catch (Throwable $e) {
    echo "caught\n";
}

echo "all done!\n";

在那种情况下,我希望 "caught" 被回显,然后脚本显示 "all done!"。相反,我得到这个:

Notice: Undefined variable: a in C:\games\test-ssh3.php on line 12
all done!

我是不是误会了什么?

仅针对以前会停止执行的某些类型的错误抛出异常 (E_RECOVERABLE_ERROR)。警告和通知不会停止执行,因此不会抛出异常(为此找到 source)。

您必须定义一个 custom error handler 并在那里抛出异常。 PHP 通知也不例外,因此不会通过 try/catch 块捕获。

set_error_handler('custom_error_handler');

function custom_error_handler($severity, $message, $filename, $lineno) {
    throw new ErrorException($message, 0, $severity, $filename, $lineno);
}

try {
    echo $a[4];
} catch (ErrorException $e) {
    echo $e->getMessage().PHP_EOL;
}

echo "all done!\n";