2009-05-12 5 views
36

Wie kann ich auf eine Klasseneigenschaft verweisen, die nur eine Zeichenfolge kennt?

class Foo 
{ 
    public $bar; 

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

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

Was ist der richtige Weg, um die Zeichenfolge auszuwerten?

Antwort

62

Sie müssen nur ein $ verwenden, wenn Sie die Elementvariable eines Objekts mithilfe einer Stringvariablen referenzieren.

echo $this->$string; 
3

waren Sie sehr nah dran. Du hast gerade 1 zusätzliches $ -Zeichen hinzugefügt.

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

Sie brauchen nur $$string, wenn eine lokale Variable Zugriff auf nur seinen Namen in einem String gespeichert sind. Da Sie normalerweise in einer Klasse wie $obj->property darauf zugreifen, müssen Sie nur eine $ hinzufügen.

18

Wie die anderen bereits erwähnt haben, sollte $ this -> $ string den Trick machen.

Doch diese

$this->$$string; 

wertet tatsächlich String und auswerten wieder das Ergebnis davon.

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

Um die genaue Syntax erinnern, dass Sie nehmen daran einen $ mehr verwenden, als Sie normalerweise verwenden. Wenn Sie $object->property verwenden, um auf eine Objekteigenschaft zuzugreifen, wird der dynamische Zugriff mit $object->$property_name ausgeführt.

27

Wenn Sie einen Eigenschaftswert für den Erhalt der Name einer Eigenschaft verwenden möchten, müssen Sie „{“ Klammern:

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

Auch wenn sie Objekte, sie funktionieren:

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

Das hat den Trick für mich (PHP 5.2) – doublejosh

+0

Erstaunlich, dass PHP diese Strukturen erlaubt! Es kann aber auch ziemlich vage zu anderen sein – MDijkstra

+0

Es ist auch praktisch, wenn Sie Literal mit dynamischen var kombinieren zB: $ this -> {"my_prop _". $ I} ' –