5

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

4

2 回答 2

5

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

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

但是,这仍然不允许您将它们与魔术方法__get或一起使用__set,因为它们仅适用于对象上下文。来自魔法方法的 PHP 手册:

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

另请参阅 PHP Internals Mailing List 上关于介绍的讨论__getStatic

于 2011-07-04T08:50:58.143 回答
0

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

如果您尝试将属性作为静态访问,这就是结果ClassName::$propertyName

于 2011-07-04T08:17:34.400 回答