Intereting Posts
Не удается запустить PHP-скрипт cron Загрузка приветствующей анимации только после jquery / php Если имена верхних регистров преобразуются в правильное дело, обрабатываются «О'Хара», «Макдональд», «Ван дер Слоут» и т. Д. Как проверить, доступен ли ресурс потока PHP для чтения или записи? Подсчет количества результатов, возвращаемых запросом базы данных в Codeigniter синтаксис ошибки синтаксического анализа неожиданный конец файла php Кнопка WooCommerce Plus / Minus в корзине показывает с перерывами MySIte немедленно выйдет из системы для второго запроса PHP MongoDB Исключить _id из результатов как поместить переменную javascript в php echo Получите реальный профиль изображения в Facebook Фоновая трансперенситивность в изображении () XML-разбиение на страницы с помощью PHP сравнение строк со операторами сравнения php Учетные данные для входа в PHP-шифрование Доступ к API

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

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

$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 недействительно из-за пробелов и символа - .