Подтвердить что ты не робот

PHP, $this → {$ var} - что это значит?

Я столкнулся с необходимостью доступа/изменения переменной как таковой:

$this->{$var}

Контекст с правилами получения данных CI datamapper. Кажется, я не знаю, что делает этот синтаксис. Что делать в этом контексте? Почему не просто:

$this->var

спасибо!

4b9b3361

Ответ 1

Это переменная , так что вы получите $this->{value-of-$val}.

Смотрите: http://php.net/manual/en/language.variables.variable.php

Итак, например:

$this->a = "hello";
$this->b = "hi";
$this->val = "howdy";

$val = "a";
echo $this->{$val}; // outputs "hello"

$val = "b";
echo $this->{$val}; // outputs "hi"

echo $this->val; // outputs "howdy"

echo $this->{"val"}; // also outputs "howdy"

Рабочий пример: http://3v4l.org/QNds9

Это, конечно, работает в контексте класса. Вы можете использовать переменные переменные в локальном контексте так же легко:

$a = "hello";
$b = "hi";

$val = "a";
echo $$val; // outputs "hello"

$val = "b";
echo $$val; // outputs "hi"

Рабочий пример: http://3v4l.org/n16sk

Ответ 2

Прежде всего $this->{$var} и $this->var - две разные вещи. Последний запрашивает переменную класса var, а другая запрашивает имя переменной, содержащейся в строке $var. Если $var - это строка 'foo', тогда она запросит $this->foo и т.д.

Это полезно для динамического программирования (когда вы знаете имя переменной только во время выполнения). Но классическая нотация {} в строковом контексте очень эффективна, особенно когда у вас есть странные имена переменных:

${'y - x'} = 'Ok';
$var = 'y - x';
echo ${$var};  

будет печатать Ok, даже если имя переменной y - x недопустимо из-за пробелов и символа -.