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


Possible to test if a variable is static in PHP?

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

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

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

然而,这仍然不允许您将它们与神奇的方法__get__set一起使用,因为它们只在对象上下文中工作。来自PHP魔术方法手册:

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

另请参阅PHP内部邮件列表中关于引入__getStatic:的讨论

  • http://marc.info/?l=php-内部构件&m=121875353105996&w=1

我认为您不能使用magic__get((方法访问未声明的静态属性。它将引发PHP致命错误。至少使用5.3版本的PHP。

当然,如果您将尝试以静态ClassName::$propertyName的形式访问该属性,那么结果就是这样的。