2009-05-12 12 views
36

Jak mogę odwoływać się do właściwości klasy, znając tylko ciąg znaków?

class Foo 
{ 
    public $bar; 

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

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

jaki jest prawidłowy sposób na odczytanie ciągu znaków?

Odpowiedz

62

Należy użyć tylko jednego $ przy odwoływaniu się do zmiennej składowej obiektu za pomocą zmiennej łańcuchowej.

echo $this->$string; 
3

byłeś bardzo blisko. właśnie dodałeś 1 dodatkowy znak $.

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

Wystarczy $$string podczas uzyskiwania dostępu do lokalnej zmiennej mającej tylko swoją nazwę przechowywaną w ciąg. Ponieważ zwykle w klasie uzyskujesz dostęp do niej w stylu $obj->property, wystarczy dodać tylko jeden: $.

18

Jak wspomnieli inni, $ this -> $ string powinno załatwić sprawę.

Jednak ta

$this->$$string; 

rzeczywiście ocenić łańcuch i ponownie ocenić wynik tego.

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

Aby pamiętam dokładnej składni, należy pamiętać, że używasz więcej $ niż normalnie używać. Podczas korzystania z $object->property w celu uzyskania dostępu do właściwości obiektu, dostęp dynamiczny jest realizowany za pomocą $object->$property_name.

27

Jeśli chcesz użyć wartości nieruchomości dla uzyskania nazwy własności, trzeba użyć „{” wsporniki:

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

Nawet jeśli są obiekty, pracują:

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

To mi się udało (PHP 5.2) – doublejosh

+0

Zadziwiające, że PHP pozwala na te struktury! Ale może też być niewyraźnie dla innych – MDijkstra

+0

Jest także przydatny, jeśli łączysz literał z dynamicznym var np .: '$ this -> {" my_prop _ ". $ I}' –