介绍
PHP使您可以通过在类中声明魔术方法来重载方法调用和属性访问。这将启用以下代码:
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
除了重载实例属性和方法外,从PHP 5.3.0开始,我们还可以static
通过覆盖magic方法来重载方法调用__callStatic
。
缺少的东西
可用功能中明显缺少的是过载静态属性的能力,例如:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
此限制已明确记录在案:
属性重载仅在对象上下文中起作用。这些魔术方法不会在静态上下文中触发。因此,不应声明这些方法
static
。从PHP 5.3.0开始,如果声明了一种魔术重载方法,则会发出警告static
。
但为什么?
我的问题是:
- 是否出于技术原因当前不支持此功能?还是(颤抖的)政治原因?
- 过去是否有过任何中止尝试添加此功能的尝试?
最重要的是,问题不是 “如何在userland PHP中具有动态静态属性?”。也就是说,如果您知道__callStatic
要共享的特别可爱的实现,则一定要这样做。
__getStatic()
并__setStatic()
在其上提供支持,但为可实例化的类提供此功能仍然很有用。您知道朝这个方向的任何动作吗?