Как я могу ссылаться на свойство класса, зная только строку?
class Foo { public $bar; public function TestFoobar() { $this->foobar('bar'); } public function foobar($string) { echo $this->$$string; //doesn't work } }
Каков правильный способ оценки строки?
Вам нужно всего лишь использовать один $ при ссылке на переменную-член объекта с помощью строковой переменной.
echo $this->$string;
Если вы хотите использовать значение свойства для получения имени свойства, вам нужно использовать «{» скобки:
$this->{$this->myvar} = $value;
Даже если это объекты, они работают:
$this->{$this->myobjname}->somemethod();
Как уже отмечали другие, $ this -> $ string должен делать трюк.
Однако это
$this->$$string;
будет фактически оценивать строку и снова оценивать результат этого.
$foo = 'bar'; $bar = 'foobar'; echo $$foo; //-> $'bar' -> 'foobar'
вы были очень близки. вы просто добавили 1 дополнительный знак $.
public function foobar($string) { echo $this->$string; //will work }
echo $this->$string; //should work
Вам нужна $$string
при доступе к локальной переменной, имеющей только ее имя, хранящееся в строке. Поскольку обычно в классе вы получаете доступ к нему как $obj->property
, вам нужно добавить только один $
.
Чтобы помнить точный синтаксис, учтите, что вы используете $
больше, чем обычно используете. Поскольку вы используете $object->property
для доступа к свойству объекта, динамический доступ выполняется с помощью $object->$property_name
.