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

时间:2011-07-04 08:08:28

标签: php static-variables magic-methods

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

2 个答案:

答案 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的形式访问该属性,那就是结果。