динамическое свойство класса $$ value в php - PullRequest
38 голосов
/ 12 мая 2009

Как я могу ссылаться на свойство класса, зная только строку?

class Foo
{
    public $bar;

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

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

Как правильно вывести строку?

Ответы [ 6 ]

67 голосов
/ 12 мая 2009

Вам нужно использовать только один $ при ссылке на переменную-член объекта, используя строковую переменную.

echo $this->$string;
31 голосов
/ 13 апреля 2010

Если вы хотите использовать значение свойства для получения имени свойства, вам необходимо использовать скобки "{":

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

Даже если они объекты, они работают:

$this->{$this->myobjname}->somemethod();
19 голосов
/ 12 мая 2009

Как уже упоминали другие, $ this -> $ string должно помочь.

Однако, это

$this->$$string;

фактически оценит строку и снова оценит результат этого.

$foo = 'bar';
$bar = 'foobar';
echo $$foo; //-> $'bar' -> 'foobar'
3 голосов
/ 12 мая 2009

ты был очень близко. Вы только что добавили 1 дополнительный знак $.

public function foobar($string)
{
     echo $this->$string; //will work
}
0 голосов
/ 03 августа 2009

Чтобы запомнить точный синтаксис, имейте в виду, что вы используете $ больше, чем обычно. Поскольку вы используете $object->property для доступа к свойству объекта, динамический доступ осуществляется с помощью $object->$property_name.

0 голосов
/ 12 мая 2009
echo $this->$string; //should work

Вам нужно только $$string при доступе к локальной переменной, в которой в строке хранится только ее имя. Поскольку обычно в классе вы обращаетесь к нему как $obj->property, вам нужно добавить только один $.

...