Проверить, существует ли свойство

Можно ли проверить, существует ли свойство, установленное с помощью волшебного сеттера?

class Test
{
    private $vars;

    public function __set($key, $value) {
        $this->vars[$key] = $value;
    }

    public function &__get($key)
    {
        return $this->vars[$key];
    }
}

$test = new Test;

$test->myvar = 'yay!';

if (magic_isset($test->myvar)) {
}

Или это невозможно, и мне просто нужно настроить другую функцию в моем классе?


person PeeHaa    schedule 06.01.2012    source источник
comment
попробуйте посмотреть __isset php.net/manual/en/language.oop5.overloading. php   -  person Damp    schedule 06.01.2012
comment
Нет, как говорит @danjordan, попробуйте посмотреть property_exists в php5+ php.net/manual/ ru/function.property-exists.php   -  person John Magnolia    schedule 07.04.2013
comment
Я предполагаю, что люди, скорее всего, ищут здесь property_exists() из поисковый движок   -  person Pierre de LESPINAY    schedule 23.02.2017


Ответы (1)


Используйте __isset() и isset():

public function __isset($key)
{
    return isset($this->vars[$key]);
}
$test = new Test;

$test->myvar = 'yay!';

if (isset($test->myvar)) {

}
person Tim Cooper    schedule 06.01.2012
comment
Поведение isset отличается от поведения функции property_exist (т. е. если свойство существует, но равно null или false, isset обычно возвращает false). Это решение (но и вопрос) весьма неоднозначно. - person Alain Tiemblo; 24.05.2013