class a { function __get($property){...} } $obj = new a(); var_dump(isset($obj->newproperty));
Кажется, ответ нет, но почему?
Потому что он проверяет __isset, а не извлекает его с помощью __get.
Это гораздо лучший вариант для вызова __isset, так как нет стандарта на то, что пусто. Возможно, в контексте класса null допустимое значение. Вы также можете иметь класс, который, если член не существовал, он возвратил новый пустой объект, который сломал isset($myObj->item)
поскольку в этом случае он всегда будет возвращать true.
Это просто не так; Вместо этого вы можете использовать __isset. Это выложено здесь .
Нет, __get
не следует запускать, когда вы пытаетесь определить, установлено ли свойство: тестирование, если свойство задано, – это не то же самое, что пытаться получить его значение.
Использование isset
запускает __isset
магии __isset
.
Видеть :
isset
Волшебная функция __get вызывается только при попытке получить доступ к свойству, которое не существует. Проверка наличия свойства – это не то же самое, что и его получение.
Class A{ public function __get($key){ ... } public function __set($key,$name){ ... } public function __unset($key){ ... } public function __isset($key){ ... } } $obj = new A(); $get = $obj->newproperty;//$obj->__get("newproperty") $obj->newproperty = "X";//$obj->__set("newproperty","X") $bool = isset($obj->newproperty);//$obj->__isset("newproperty") unset($obj->newproperty);//$obj->__unset("newproperty")