пустой () возвращение 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()?

btw. Я выполняю версию 5.0.4 PHP

5
задан Charles 24 December 2012 в 05:50
поделиться

2 ответа

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

Вам потребуется реализовать __ isset () , чтобы пусто и isset работали.

11
ответ дан 18 December 2019 в 11:53
поделиться

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

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

public function __isset($name)
{
    $priv_name = "_{$name}";

    return isset($this->$priv_name);
}
5
ответ дан 18 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: