根据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!
我误解了什么吗?
答案 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";