尝试访问非对象属性(未分配)时没有错误或警告

时间:2010-09-23 19:26:54

标签: php object error-handling var

有人可以向我解释为什么PHP在访问空对象的属性时没有报告警告或错误(未分配var)?

例如:

$oMyObject->test = 'hello world'; // $oMyObject is not assigned but no warning or error

当我这样做时,会产生错误:

$oMyObject->test(); // Error: Calling function on non-object

版本信息:

Windows XP
XAMPP Windows Version 1.7.0
Apache/2.2.11 (Win32) 
PHP 5.2.8
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with Xdebug v2.0.4, Copyright (c) 2002-2008, by Derick Rethans

为什么呢?试图设置error_reporting(E_ALL)但仍然没有错误或警告。

2 个答案:

答案 0 :(得分:0)

$ oMyObject-> text ='hello world';是一个完全有效的声明,前提是文本是公开的而不是私有的或受保护的。至于$ oMyObject-> text(),您需要提供更多信息。你得到什么样的错误?函数text()是公共的还是私有的还是受保护的?你能发布这个功能吗?

答案 1 :(得分:0)

PHP中的这种行为非常容易出错! 谁真的认为这是个好主意?

$rs = $db->Execute("SELECT 1");
while(!$r->EOF) {
   // runs forever
   $rs->MoveNext();
}

未立即检测到拼写错误($r而非$rs),因为它没有错误。

开心辞典!

在我看来,这是非/ null-object成员访问是完整的FUBAR。 在这种情况下,每种理智的语言(PHP都不是)会给你一个很大的错误(例如异常,nullpointerexception,总线错误,分段错误等)。