Можно ли проверить, является ли переменная статической в ​​PHP? - PullRequest
6 голосов
/ 04 июля 2011

Можно ли проверить, является ли переменная статической в ​​PHP? Я пытаюсь создать магический метод __get, который также смотрит на статические переменные. Я считаю, что property_exists() возвращает истину, когда переменная тоже статическая. Но мне нужно будет использовать :: вместо -> Я ожидаю?

Ответы [ 2 ]

6 голосов
/ 04 июля 2011

Можно проверить, является ли переменная статической, с помощью Reflection:

class Foo { static $bar; }
$prop = new ReflectionProperty('Foo', 'bar');
var_dump($prop->isStatic()); // TRUE

Однако это не позволит вам использовать их с магическими методами __get или __set, потому что ониработать только в контексте объекта. Из руководства PHP по магическим методам:

Перегрузка свойств работает только в контексте объекта.Эти магические методы не будут запускаться в статическом контексте.Поэтому эти методы не должны быть объявлены как статические.Начиная с PHP 5.3.0, выдается предупреждение, если один из магических методов перегрузки объявлен как статический.

См. Также это обсуждение в списке рассылки по внутренним ресурсам PHP о введении __getStatic:

0 голосов
/ 04 июля 2011

Я не думаю, что вы можете получить доступ к необъявленным статическим свойствам, используя магический метод __get (). Это вызовет фатальную ошибку PHP. По крайней мере, с PHP версии 5.3.

Это результат, если вы попытаетесь получить доступ к свойству как статическому ClassName::$propertyName, конечно.

...