Как я могу ссылаться на свойство класса, зная только строку?
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 }
Чтобы запомнить точный синтаксис, имейте в виду, что вы используете $ больше, чем обычно. Поскольку вы используете $object->property для доступа к свойству объекта, динамический доступ осуществляется с помощью $object->$property_name.
$
$object->property
$object->$property_name
echo $this->$string; //should work
Вам нужно только $$string при доступе к локальной переменной, в которой в строке хранится только ее имя. Поскольку обычно в классе вы обращаетесь к нему как $obj->property, вам нужно добавить только один $.
$$string
$obj->property