【问题标题】:Possible to test if a variable is static in PHP?可以测试变量是否在 PHP 中是静态的?
【发布时间】:2026-01-07 23:05:01
【问题描述】:

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

【问题讨论】:

标签: php static-variables magic-methods


【解决方案1】:

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

如果您尝试以静态ClassName::$propertyName 的身份访问该属性,结果当然是这样。

【讨论】:

  • 我声明它像protected static $var 所以它没有未声明?
  • @JM 被声明为私有的,所以如果你在类外使用它就像是未声明的一样
【解决方案2】:

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

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 开始,如果其中一个魔术重载方法被声明为静态,则会发出警告。

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

【讨论】: