У меня есть очень странная и неожиданная проблема.
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()
?
btw. Я выполняю версию 5.0.4 PHP
Да, это то, что это означает. empty
- это не ваша повседневная функция, это языковая конструкция, которая не работает по обычным правилам. Поскольку на самом деле $ obj-> property
не существует, поэтому результат правильный.
Вам потребуется реализовать __ isset ()
, чтобы пусто
и isset
работали.
Если вы хотите использовать пустой
или isset
со свойствами, вам необходимо объявить функцию-член с именем __isset
.
Вот возможная реализация:
public function __isset($name)
{
$priv_name = "_{$name}";
return isset($this->$priv_name);
}