class a {
function __get($property){...}
}
$obj = new a();
var_dump(isset($obj->newproperty));
Кажется, что ответ - нет, но почему?
Потому что она проверяет __isset, а не извлекает его с помощью __get.
Гораздо лучше вызывать __isset, так как нет стандарта на то, что является пустым. Возможно, в контексте класса null является приемлемым значением. Вы также можете иметь класс, который, если член не существует, возвращает новый пустой объект, что нарушит isset($myObj->item)
, так как в этом случае он всегда будет возвращать true.
Магическая функция __get вызывается только тогда, когда вы пытаетесь получить доступ к несуществующему свойству. Проверить, существует ли свойство, не то же самое, что получить его.
Нет, __ get
не должен запускаться, когда вы пытаетесь определить, установлено ли свойство: проверка того, установлено ли свойство, - это не то же самое, что пытаться получить его значение.
Использование isset
запускает магический метод __ isset
.
См .:
Это не так; вместо этого вы можете использовать __isset. Это изложено здесь.