是否可以测试PHP中的变量是否为静态?我正在尝试创建一个魔术方法__get
,它也会查看静态变量。当变量是静态的时候,我发现property_exists()
返回true。但我需要使用::
而不是->
我期望的?
答案 0 :(得分:6)
可以通过Reflection测试变量是否为静态:
class Foo { static $bar; }
$prop = new ReflectionProperty('Foo', 'bar');
var_dump($prop->isStatic()); // TRUE
但是,仍然不允许您使用魔术方法__get
或__set
,因为这些只能在对象上下文中使用。 From the PHP Manual on Magic Methods:
属性重载仅适用于对象上下文。这些魔术方法不会在静态上下文中触发。因此,不应将这些方法声明为静态。从PHP 5.3.0开始,如果其中一个魔术重载方法被声明为静态,则会发出警告。
另请参阅有关介绍__getStatic
的PHP Internals邮件列表的讨论:
答案 1 :(得分:0)
我认为你不能使用magic __get()方法访问未声明的静态属性。它会引发PHP致命错误。至少使用版本为5.3的PHP。
如果您尝试以静态ClassName::$propertyName
的形式访问该属性,那就是结果。