PHP 中静态属性的魔术__get getter
2022-08-30 09:12:10
public static function __get($value)
不起作用,即使它起作用,碰巧我已经需要魔术__get获取器,例如同一类中的属性。
这可能是一个是或否的问题,所以,有可能吗?
public static function __get($value)
不起作用,即使它起作用,碰巧我已经需要魔术__get获取器,例如同一类中的属性。
这可能是一个是或否的问题,所以,有可能吗?
不,这是不可能的。
引用__get手册页:
成员重载仅适用于对象上下文。这些神奇的方法不会在静态上下文中触发。因此,这些方法不能声明为静态。
在 PHP 5.3 中,添加了 __callStatic
;但是没有,还没有;即使拥有/编码它们的想法经常回到php internals@邮件列表中。__getStatic
__setStatic
甚至还有一个征求意见:PHP
的静态类但是,仍然没有实现(还没有?
也许有人仍然需要这个:
static public function __callStatic($method, $args) {
if (preg_match('/^([gs]et)([A-Z])(.*)$/', $method, $match)) {
$reflector = new \ReflectionClass(__CLASS__);
$property = strtolower($match[2]). $match[3];
if ($reflector->hasProperty($property)) {
$property = $reflector->getProperty($property);
switch($match[1]) {
case 'get': return $property->getValue();
case 'set': return $property->setValue($args[0]);
}
} else throw new InvalidArgumentException("Property {$property} doesn't exist");
}
}