empty () возвращает TRUE на непустое свойство объекта

У меня очень странная и неожиданная проблема.

empty() возвращает TRUE для непустого свойства по неизвестной мне причине.

 class MyObject { private $_property; public function __construct($property) { $this->_property = $property; } public function __get($name) { $priv_name = "_{$name}"; if (isset($this->$priv_name)) { return $this->$priv_name; } else { return NULL; } } } $obj = new MyObject('string value'); echo $obj->property; // Output 'string value' echo empty($obj->property); // Output 1 (means, that property is empty) 

Означает ли это, что функция __get() не вызывается при использовании empty() ?

Кстати. Я запускаю PHP версии 5.0.4

Related of "empty () возвращает TRUE на непустое свойство объекта"

Да, вот что это значит. empty – это не ваша повседневная функция, это языковая конструкция, которая не воспроизводится обычными правилами. Потому что на самом $obj->property не существует, поэтому результат правильный.

Вам нужно будет реализовать __isset() для empty и isset для работы.

Если вы хотите использовать empty или isset со свойствами, вам нужно объявить функцию-член, называемую __isset .

Вот возможная реализация:

 public function __isset($name) { $priv_name = "_{$name}"; return isset($this->$priv_name); } 
 if (isset(($this->$priv_name))) 

Помещение () вокруг значения Object-> Property заставит его оценивать до вызова isset .