Я столкнулся с необходимостью доступа / изменения переменной как таковой:
$this->{$var}
Контекст заключается в получении правил CI datamapper. Кажется, я не знаю, что делает этот синтаксис. Что делают {в этом контексте? Почему не просто:
$this->var
благодаря!
Это переменная переменная , так что вы получите $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
Прежде всего $this->{$var} и $this->var – две разные вещи. Последний запрашивает переменную класса var а другая запрашивает имя переменной, содержащейся в строке $var . Если $var – это строка 'foo' то она запросит $this->foo и так далее.
Это полезно для динамического программирования (когда вы знаете имя переменной только во время выполнения). Но классическая {} нотация в строчном контексте очень мощная, особенно когда у вас есть странные имена переменных:
${'y - x'} = 'Ok'; $var = 'y - x'; echo ${$var};
будет печатать Ok даже если имя переменной y - x недействительно из-за пробелов и символа - .