1

有人可以向我解释为什么 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 ) 但仍然没有错误或警告。

4

2 回答 2

0

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

于 2010-09-23T19:35:57.450 回答
0

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

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

不会立即检测到拼写错误($r相反$rs),因为它没有错误。

耶皮!

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

于 2012-02-29T09:46:17.270 回答