Ответ 1
Вам нужно всего лишь использовать один $при ссылке на переменную-член объекта с помощью строковой переменной.
echo $this->$string;
Как я могу ссылаться на свойство класса, зная только строку?
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
.