Будет isset (), триггер __ добирается и почему?

class a {
   function __get($property){...}
}

$obj = new a();
var_dump(isset($obj->newproperty));

Кажется, что ответ - нет, но почему?

9
задан Michael Robinson 30 July 2012 в 03:47
поделиться

4 ответа

Потому что она проверяет __isset, а не извлекает его с помощью __get.

Гораздо лучше вызывать __isset, так как нет стандарта на то, что является пустым. Возможно, в контексте класса null является приемлемым значением. Вы также можете иметь класс, который, если член не существует, возвращает новый пустой объект, что нарушит isset($myObj->item), так как в этом случае он всегда будет возвращать true.

19
ответ дан 4 December 2019 в 09:36
поделиться

Магическая функция __get вызывается только тогда, когда вы пытаетесь получить доступ к несуществующему свойству. Проверить, существует ли свойство, не то же самое, что получить его.

0
ответ дан 4 December 2019 в 09:36
поделиться

Нет, __ get не должен запускаться, когда вы пытаетесь определить, установлено ли свойство: проверка того, установлено ли свойство, - это не то же самое, что пытаться получить его значение.

Использование isset запускает магический метод __ isset .

См .:

1
ответ дан 4 December 2019 в 09:36
поделиться

Это не так; вместо этого вы можете использовать __isset. Это изложено здесь.

2
ответ дан 4 December 2019 в 09:36
поделиться
Другие вопросы по тегам:

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