我知道我可以这样做:
class Foo {
public function bar( $k, $v ){
$this->{$k} = $v;
}
}
如果我尝试:
class Foo {
public static function bar( $k, $v ){
self::${$k} = $v;
}
}
它不起作用。我可能不太了解静态属性。谁能解释一下?
答案 0 :(得分:2)
您无法动态设置静态属性(否则不是静态的:P),但您可以对其进行管理,例如
class Foo {
static $vars;
public static function set( $k, $v ){
self::$vars[$k] = $v;
}
public static function get( $k ){
return isset(self::$vars[$k]) ? self::$vars[$k] : 'error';
}
}
答案 1 :(得分:1)
从PHP 5.1.0起,如果属性是预定义的,但您想动态分配新值,则可以使用ReflectionClass。
class Foo {
public static $prop1;
public static function bar( $k, $v ){
$class = new ReflectionClass("Foo");
$class->setStaticPropertyValue($k, $v);
}
}
$k = 'prop1';
$v = 'test';
Foo:bar($k, $v);
免责声明:使用反射会产生难以阅读的代码,并且可能会被利用。它还使得以后重构代码变得困难。因此,请先检查您的问题是否无法以不同的方式解决。