捕获“对非对象调用成员函数foo()”错误

时间:2011-11-30 10:54:04

标签: php fatal-error

有没有办法在PHP中捕获Call to a member function foo() on a non-object?听起来并不严重(就致命错误而言),但似乎根本没有调用shutdown function(PHP 5.3,Debian)。

更新

如何防止此类错误真的不是重点。当然,只要这是预期的可能性,就应该检查null,但是使用错误检查代码乱丢每个对象成员函数引用会导致代码膨胀且不可读。根据日志查找偶然错误很好 - 问题是日志对致命错误不是很有用。使用关闭功能可以很好地解决这个问题,但是我无法使用它来处理这种特定类型的错误;这对我来说似乎很奇怪,因为这不会导致PHP解释器处于特别混乱的状态。

2 个答案:

答案 0 :(得分:0)

我希望这听起来并不愚蠢 - 但你应该确保你知道你在做什么。在您需要的地方使用instanceofis_object - 或者解决问题的根源 - 为什么该变量首先不是对象?

答案 1 :(得分:0)

我建议确保它是一个对象。使用方法/函数,您可以使用类型提示

public function x (myClass $object) {
  $object->foo();
}

否则您可以使用is_object()。最后,这样的消息听起来像你的应用程序中有一个错误,应该在发布之前修复,或者 - 如果设计可能发生这种情况 - 验证类型(is_object()(见上文)或在尝试调用某些不存在的东西之前,!is_null($obj)或类似的事情。