可以测试PHP中的变量是否是静态的吗?

JM *_*ork 6 php static-variables magic-methods

是否可以测试PHP中的变量是否是静态的?我正在尝试创建一个__get也看静态变量的魔术方法.我发现property_exists()当变量也是静态时返回true.但我需要使用::而不是->我期望的?

Gor*_*don 6

可以通过Reflection测试变量是否为静态:

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

但是,这仍然不允许您使用魔术方法__get__set因为那些仅在对象上下文中工作.从魔术方法的PHP手册:

属性重载仅适用于对象上下文.这些魔术方法不会在静态上下文中触发.因此,不应将这些方法声明为静态.从PHP 5.3.0开始,如果其中一个魔术重载方法被声明为静态,则会发出警告.

另请参阅PHP内部邮件列表中有关介绍的讨论__getStatic: