PHP 7中的错误没有被抛出

时间:2018-02-07 11:48:17

标签: php error-handling throwable

根据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";

在那种情况下,我期待&#34;抓住&#34;然后回复说出然后脚本说'#34;全部完成!&#34;。相反,我得到了这个:

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

我误解了什么吗?

1 个答案:

答案 0 :(得分:1)

仅对以前会暂停执行的某些类型的错误(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";