Можно ли проверить, является ли переменная статичной в PHP? Я пытаюсь создать магический метод __get
который также смотрит на статические переменные. Я обнаружил, что property_exists()
возвращает true, когда переменная тоже статическая. Но мне нужно будет использовать ::
вместо ->
я бы ожидал?
Можно проверить, является ли переменная статической с помощью Reflection:
class Foo { static $bar; } $prop = new ReflectionProperty('Foo', 'bar'); var_dump($prop->isStatic()); // TRUE
Однако это все равно не позволит вам использовать их с магическими методами __get
или __set
, потому что они работают только в контексте объекта. Из руководства PHP по магическим методам:
Перегрузка объектов работает только в контексте объекта. Эти магические методы не будут инициироваться в статическом контексте. Поэтому эти методы не должны быть объявлены статическими. Начиная с PHP 5.3.0, предупреждение выдается, если один из методов магии перегрузки объявлен статическим.
Также см. Это обсуждение в списке рассылки PHP Internals о введении __getStatic
:
Я не думаю, что вы можете получить доступ к незаявленному статическому свойству с помощью магического метода __get (). Это вызовет ошибку PHP Fatal. По крайней мере, с PHP версии 5.3.
Это результат, если вы попытаетесь получить доступ к свойству как статическое ClassName::$propertyName
конечно.