Intereting Posts
Вытяните IP-адреса и имена ПК из файла txt Laravel: проверять целое поле, которое должно быть больше, чем другое В чем проблема в коде, написанном для сравнения даты с сегодняшней датой? Два разных языка PHP и Java в одном приложении с PHP на Apache и Java на Tomcat LightOpenID запрещен при перенаправлении назад Zend \ Mvc \ Router \ Http \ Метод и дочерние маршруты Перенаправление пользователя на мой сайт на странице холста Facebook Клиент SOAP, получающий пустой stdclass Repeater, Datalist в ASP против PHP Предупреждение: openssl_pkcs7_sign () : ошибка получения секретного ключа в C: \ xampp \ htdocs \ this \ tcpdf \ tcpdf.php в строке 8366 Перенаправление на 404, если расширение .php запрашивается по URL-адресу Отключить проверку подлинности для поля выбора в Symfony 2 Type Laravel, как добавить пользовательскую функцию в модель Eloquent? константа vs свойства в php? LAST_INSERT_ID (), как он работает в среде с несколькими пользователями

Будет ли isset () запускать __get и почему?

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")