web-dev-qa-db-ja.com

PHPの動的クラスプロパティ$$ value

文字列だけを知っているクラスプロパティをどのように参照できますか?

class Foo
{
    public $bar;

    public function TestFoobar()
    {
        $this->foobar('bar');
    }

    public function foobar($string)
    {
         echo $this->$$string; //doesn't work
    }
}

文字列を評価する正しい方法は何ですか?

38

文字列変数を使用してオブジェクトのメンバー変数を参照する場合は、$を1つだけ使用する必要があります。

echo $this->$string;
67
Antonio Haley

プロパティの名前を取得するためにプロパティ値を使用する場合は、「{」括弧を使用する必要があります。

$this->{$this->myvar} = $value;

オブジェクトであっても機能します。

$this->{$this->myobjname}->somemethod();
32
Rick

他の人が述べたように、$ this-> $ stringがうまくいくはずです。

しかし、これは

$this->$$string;

実際に文字列を評価し、その結果を再度評価します。

$foo = 'bar';
$bar = 'foobar';
echo $$foo; //-> $'bar' -> 'foobar'
19
Matthew H.

あなたはとても親しかった。 $記号を1つ追加しました。

public function foobar($string)
{
     echo $this->$string; //will work
}
3
Mike Stanford

正確な構文を覚えておくために、$通常使用するよりも多く。 $object->propertyを使用してオブジェクトプロパティにアクセスし、動的アクセスは$object->$property_name

0
Kiam
echo $this->$string; //should work

$$stringが必要なのは、名前のみが文字列に格納されているローカル変数にアクセスする場合のみです。通常、クラスでは$obj->propertyのようにアクセスするため、$を1つ追加するだけで済みます。

0
Marc W