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";
据我了解,根据 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";