我知道我可以这样做:
class Foo {
public function bar( $k, $v ){
$this->{$k} = $v;
}
}
如果我尝试这样做:
class Foo {
public static function bar( $k, $v ){
self::${$k} = $v;
}
}
这没用。我可能不太了解静态属性。谁能解释一下?
我知道我可以这样做:
class Foo {
public function bar( $k, $v ){
$this->{$k} = $v;
}
}
如果我尝试这样做:
class Foo {
public static function bar( $k, $v ){
self::${$k} = $v;
}
}
这没用。我可能不太了解静态属性。谁能解释一下?
您不能动态设置静态属性(否则不是静态的: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';
}
}
从 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);
免责声明:使用反射会产生难以阅读的代码,并且可能会被利用。这也使得以后很难重构代码。因此,请先检查您的问题是否无法以其他方式解决。