1

我知道我可以这样做:

class Foo {
   public function bar( $k, $v ){
       $this->{$k} = $v;
   }
}

如果我尝试这样做:

class Foo {
    public static function bar( $k, $v ){
       self::${$k} = $v;
    }
}

这没用。我可能不太了解静态属性。谁能解释一下?

4

2 回答 2

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';
    }
}
于 2013-05-24T00:09:12.843 回答
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); 

免责声明:使用反射会产生难以阅读的代码,并且可能会被利用。这也使得以后很难重构代码。因此,请先检查您的问题是否无法以其他方式解决。

于 2015-02-26T13:01:57.583 回答