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