2009-05-12 8 views
36

Come posso fare riferimento a una proprietà di classe conoscendo solo una stringa?

class Foo 
{ 
    public $bar; 

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

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

qual è il modo corretto per valutare la stringa?

risposta

62

È necessario utilizzare solo $ quando si fa riferimento alla variabile membro di un oggetto utilizzando una variabile stringa.

echo $this->$string; 
3

eri molto vicino. hai appena aggiunto 1 extra $ sign.

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

Hai solo bisogno $$string quando si accede a una variabile locale che ha solo il suo nome memorizzato in una stringa. Dato che normalmente in una classe si accede come $obj->property, è sufficiente aggiungere uno $.

18

Come gli altri hanno menzionato, $ this -> $ string dovrebbe fare il trucco.

Tuttavia, questo

$this->$$string; 

sarà effettivamente valutare stringa, e valutare ancora una volta il risultato di questo.

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

per ricordare la sintassi esatta, prende in considerazione l'uso di un altro $ di quanto normalmente si usa. Mentre si utilizza $object->property per accedere a una proprietà dell'oggetto, l'accesso dinamico viene eseguito con $object->$property_name.

27

Se si desidera utilizzare un valore di proprietà per ottenere il nome di una proprietà, è necessario utilizzare "{" staffe:

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

Anche se sono gli oggetti, per cui lavorano:

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

Questo ha fatto il trucco per me (PHP 5.2) – doublejosh

+0

Incredibile che PHP permetta queste strutture! Ma può anche essere piuttosto vagamente per gli altri – MDijkstra

+0

È anche utile se si combina il letterale con la variabile dinamica es .: '$ this -> {" my_prop _ ". $ I}' –