有时,我的脚本无法读取服务器的输出,出现以下错误:
PHP 致命错误:尝试在非对象上调用成员函数somefun()
这并不是我无法解决的问题,但会导致我的脚本崩溃。有没有一种方法可以在发生此特定错误时运行函数?我认为使用try-catch或类似方法并不实际,因为我需要找到每个调用成员函数并测试对象是否存在的实例(数千个)。
有时,我的脚本无法读取服务器的输出,出现以下错误:
PHP 致命错误:尝试在非对象上调用成员函数somefun()
这并不是我无法解决的问题,但会导致我的脚本崩溃。有没有一种方法可以在发生此特定错误时运行函数?我认为使用try-catch或类似方法并不实际,因为我需要找到每个调用成员函数并测试对象是否存在的实例(数千个)。
可以捕获"Error"可抛出对象,参见http://php.net/manual/zh/language.errors.php7.php
<?php
$x = "not an object";
try {
$x->foo();
} catch (\Throwable $t) {
echo "caught";
}
有没有办法创建一个函数,当出现特定错误时运行该函数?
是的,您可以使用"register_shutdown_function",在遇到此错误后,在PHP死亡之前调用一个函数。
PHP:捕获致命错误(对非对象成员函数的调用)
如果您所说的“捕获”是指从此错误中恢复,那么这是不可能的,因为PHP已将“对非对象成员函数的调用”定义为“致命”错误。请参见PHP turn "Call to a member function on a non-object" into exception,了解一些关于为什么会这样的讨论。
你可能正在寻找http://www.php.net/manual/en/function.set-error-handler.php。你需要编写自己的错误处理程序,并检查错误代码以确定是否要显示错误。
E_ERROR
吗?如果是,这样就行不通了。 - dukevin