PHP:捕获致命错误(调用非对象上的成员函数)

2022-08-31 00:21:47

有时,我的脚本无法读取服务器的输出,并发生以下错误:

PHP Fatal error: Call to a member function somefun() on a non-object

这不是我无法在我这边修复的东西,但这会导致我的脚本崩溃。有没有办法创建一个在发生此特定错误时运行的函数?我不认为进行尝试捕获或类似操作是不切实际的,因为我必须找到调用成员函数的每个实例,并测试该对象是否存在(几千个)。


答案 1

在 PHP 7 中

是的,捕获可抛出的“错误”,请参阅 http://php.net/manual/en/language.errors.php7.php

演示:https://3v4l.org/Be26l

<?php

$x = "not an object";

try {
 $x->foo();
} catch (\Throwable $t) {
 echo "caught";
}

在 PHP 5 中

有没有办法创建一个在发生此特定错误时运行的函数?

是的,您可以使用“register_shutdown_function”来让PHP在遇到此错误后死亡之前调用该函数。

PHP:捕获致命错误(调用非对象上的成员函数)

如果这是“catch”的意思,则无法从此错误中恢复,因为PHP已将“调用非对象上的成员函数”定义为“致命”错误。请参阅 PHP 将“对非对象上的成员函数的调用”转换为异常,以讨论为什么会这样。


答案 2

您可能正在寻找 http://www.php.net/manual/en/function.set-error-handler.php。您必须编写自己的错误处理程序并检查错误代码是否要显示错误。


推荐