2009-05-12 9 views
36

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

class Foo 
{ 
    public $bar; 

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

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

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

答えて

62

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

echo $this->$string; 
3

あなたは非常に近くでした。あなたは1つの余分な$記号を追加しました。

public function foobar($string) 
{ 
    echo $this->$string; //will work 
} 
0
echo $this->$string; //should work 

文字列に格納されているだけで、その名前を持つローカル変数にアクセスするときにのみ$$stringを必要としています。通常はクラス内で$obj->propertyのようにアクセスするので、$の1つを追加するだけです。

18

他の人が触れたように、$ this-> $ stringはこのトリックを行うべきです。しかし

、この

$this->$$string; 

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

$foo = 'bar'; 
$bar = 'foobar'; 
echo $$foo; //-> $'bar' -> 'foobar' 
0

あなたが通常使用するよりも、$以上を使用することを念頭に置いて取り、正確な構文を覚えておくこと。 $object->propertyを使用してオブジェクトプロパティにアクセスすると、動的アクセスは$object->$property_nameで行われます。

27

あなたがプロパティの名前を取得するためのプロパティ値を使用したい場合は、あなたが使用する必要がある「{」かっこ:

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

彼らはオブジェクト方でも、彼らは働く:

$this->{$this->myobjname}->somemethod(); 
+0

これは私のトリックでした(PHP 5.2) – doublejosh

+0

PHPがこれらの構造を可能にするのは驚くべきことです!しかし、他人にもかなり曖昧になる可能性があります – MDijkstra

+0

リテラルを動的変数と組み合わせると便利です: '$ this - > {" my_prop _ "。$ i}' –

関連する問題