Я столкнулся с необходимостью доступа / изменения переменной как таковой:
$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
недействительно из-за пробелов и символа -
.