15

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

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

这不是我无法解决的问题,但这会导致我的脚本崩溃。有没有办法可以创建一个在发生此特定错误时运行的函数?我认为进行 try-catch 或类似操作并不实用,因为我必须找到调用成员函数的每个实例并测试该对象是否存在(几千个)。

4

3 回答 3

41

在 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 turn "Call to a member function on a non-object" into exception了解为什么会这样。

于 2013-03-19T17:03:43.900 回答
0

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

于 2012-07-15T04:01:15.597 回答
-1

尝试使用function_exists来检查函数是否存在:

if (function_exists("somefun")) {
   ...
}

或使用method_exists来验证类方法。

于 2012-07-15T03:59:44.817 回答