PHP 7 中的错误

PHP 7 改变了 PHP 报告大多数错误的方式。与 PHP 5 使用的传统错误报告机制不同,大多数错误现在通过抛出 Error 异常来报告。

与普通异常一样,这些 Error 异常会一直冒泡,直到遇到第一个匹配的 catch 块。如果没有匹配的块,则会调用使用 set_exception_handler() 安装的任何默认异常处理程序,如果不存在默认异常处理程序,则异常将被转换为致命错误,并像传统错误一样处理。

由于 Error 层次结构没有继承自 Exception,因此在 PHP 5 中使用 catch (Exception $e) { ... } 块来处理未捕获异常的代码将发现这些 Error 不会被这些块捕获。需要使用 catch (Error $e) { ... } 块或 set_exception_handler() 处理程序。

添加注释

用户贡献的注释 5 个注释

hungry dot rahly at gmail dot com
8 年前
你可以通过捕获(Throwable)来捕获异常和错误
demis dot palma at tiscali dot it
8 年前
Throwable 在 PHP 5.x 上不可用。

要在 PHP 5.x 和 7 中捕获异常和错误,请在首先捕获 Throwable 之后添加一个用于 Exception 的捕获块。
一旦不再需要 PHP 5.x 支持,捕获 Exception 的块就可以删除了。

try
{
// 可能抛出异常或错误的代码。
}
catch (Throwable $t)
{
// 仅在 PHP 7 中执行,在 PHP 5 中不匹配
}
catch (Exception $e)
{
// 仅在 PHP 5 中执行,在 PHP 7 中不会到达
}
ryan dot jentzsch@{gmail} dot com
7 年前
关于异常、可抛出对象以及 PHP 7 如何处理这些内容的优秀博文,请参见此处:https://trowski.com/2015/06/24/throwable-exceptions-and-errors-in-php7/
diogoca at gmail dot com
4 年前
<?php

set_error_handler
(function(int $number, string $message) {
echo
"Handler captured error $number: '$message'" . PHP_EOL ;
});

try {
echo
$x; # notice, handled on callable
pg_exec(null, null); # warning, handled on callable
fho(); # fatal error, stop running and catched
} catch (Throwable $e) {
echo
"Captured Throwable: " . $e->getMessage() . PHP_EOL;
}

?>

set_error_handler 即使没有 try 和 catch 也能正常工作
lubaev dot ka at gmail dot com
7 年前
php 7.1

try {
// 可能抛出异常或 ArithmeticError 的代码。
} catch (ArithmeticError | Exception $e) {
// pass
}
To Top