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

时间:2012-07-15 03:48:07

标签: php error-handling

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

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

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

3 个答案:

答案 0 :(得分:19)

在PHP 7中

是的,捕获“错误”throwable,请参阅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

答案 1 :(得分:-1)

尝试使用function_exists检查该功能是否存在:

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

或使用method_exists验证类方法。

答案 2 :(得分:-1)

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