Нет ошибки или предупреждения при попытке доступа к свойству не объекта (не назначен) - PullRequest
1 голос
/ 23 сентября 2010

Может кто-нибудь объяснить мне, почему PHP не выдает предупреждение или ошибку при доступе к свойству пустого объекта (переменная не назначена)?

Например:

$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 голосов
/ 29 февраля 2012

Такое поведение в PHP так подвержено ошибкам! Кто на самом деле думал, что это будет хорошей идеей?

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

Опечатка ($r вместо $rs) не обнаруживается сразу, потому что это не ошибка.

Юппи!

На мой взгляд, это не / null-объект, доступ к члену завершен FUBAR. Каждый здравомыслящий язык (которым не является PHP) в этом случае дает большую жирную ошибку (например, исключение, нулевое исключение, ошибку шины, ошибку сегментации и т. Д.)

0 голосов
/ 23 сентября 2010

$ oMyObject-> text = 'hello world';является полностью действительным заявлением, при условии, что текст объявлен общедоступным, а не закрытым или защищеннымЧто касается $ oMyObject-> text (), вам нужно предоставить больше информации.Какую ошибку вы получаете?Является ли функция text () общедоступной, частной или защищенной?Можете ли вы опубликовать, что делает функция?

...