PHP, $this → {$ var} - что это значит?
Я столкнулся с необходимостью доступа/изменения переменной как таковой:
$this->{$var}
Контекст с правилами получения данных CI datamapper. Кажется, я не знаю, что делает этот синтаксис. Что делать в этом контексте? Почему не просто:
$this->var
спасибо!
Ответы
Ответ 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
недопустимо из-за пробелов и символа -
.