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

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 に答える