Содержание
Как вы уже знаете, имя переменной сос тоит из знака $ и строки символов после него. Но, наверное, для вас будет новостью то, что имя переменной можно сохранить в другой переменной. Таким образом, выражение присваивания
эквивалентно следующей записи
В переменной $holder записана строка "user", поэтому можно представить себе, что выражение $$holder – это знак $ , за которым следует значение переменной $holder. PHP интерпритирует это как $user .
Для обращения к динамической переменной используется тот же самый синтаксис:
Это эквивалентно следующему:
Однако, для того чтобы вывести имя переменной, нужно обратиться к ней по другому. Например, следующий фрагмент не выводит в окно браузера строку bob, как можно было бы предположить.
Обратите внимание, в последней строке print "$$holder"; выражение $$holder взято в двойные кавычки, в надежде вывести в окно строку ‘bob’.
Вместо этого выводится знак $ , а за ним строка user. Когда вы обрамляете переменную двойными кавычками, PHP подставляет вместо неё соответствующее значение. В данном случае PHP подставляет вместо переменной $holder её значение user. Для того, чтобы указать PHP, что часть строки – это динамическая переменная, вам нужно взять её в фигурные скобки. Следующий код выводит строку bob, то есть значение переменной $user .
Теперь можно догадаться что имена переменных можно записывать так:
В листинге ниже всё, сказанное раньше, объединено в программу, в которой с помощью строки, хранящейся в переменной, создаётся и инициализируется новая переменная $user .
Почему это называется "динамические переменные"
Возникает вопрос, почему этот тип переменных называется динамическими. Вердёмся к примеру
Тут $$var – динамическая переменная, так как её имя может меняться вместе с изменением переменной $var .
Следует помнить, что меняя имя динамической переменной мы теряем её значение.
Если по ходу выполнения программы поменять значение переменной $var и присвоить новое значение $$var , то создастся новая переменная, а предыдущая переменная останется со старым значением.
То есть мы получаем механизм для создания "на лету" переменных с разными именами в нужных нам количествах.
Переменные переменные в PHP
Переменные переменные – это синоним, то есть другое название для динамических переменных в PHP. В англоязычном руководстве по PHP эти переменные названы "Variable variables", таким образом термин "переменные переменные" являются лингвистической калькой с английского языка.
Более сложные варианты использования динамических переменных в PHP
Возможны и более сложные варианты использования выражения: $ <‘строковое_выражение’>. Имя динамической переменной может быть результатом вычисления выражения.
Следующие переменные означают одну и ту же переменную с именем var:
Переменный с целыми числами (integer) в именах, например $ <33>, работают одинаково быстро наряду c обычными переменными, как $var . Но переменные, созданные с помощью строки, то есть $ <‘var’>, и динамические переменные $$var используют больше ресурсов, об этом стоит помнить при написании программ.
Далее следует изучить ссылки на переменные в PHP.
Мало кто знает, но в PHP существует возможность задавать динамические имена переменным. В этом коротком совете вы узнаете как это можно сделать.
Для решения нашей задачи следует использовать конструкцию $<> . Простой пример:
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://stackoverflow.com/questions/9257505/dynamic-variable-names-in-php
Перевел: Станислав Протасевич
Урок создан: 5 Августа 2015
Просмотров: 5067
Правила перепечатки
5 последних уроков рубрики "PHP"
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
У меня такая ситуация:
Это работает. Но при доступе к массиву с переменной variable-name я всегда получаю пустой массив:
Как я могу получить доступ к массиву с именем переменной?
Решение
Потому что, когда вы использовали $$ тогда это означает, что вы ссылаетесь на переменные.
Вот $$string означает, что $ temp и что не имеет значения, так что это пустой результат.
В случае, если вы хотите работать, используйте как вы предложили.
Используйте код следующим образом:
ИЛИ ЖЕ
Таким образом, вы можете использовать $$ переменные переменной в php
Другие решения
Когда вы используете $$string[0] вы вызываете переменную с именем в массиве $string , Поскольку строки в основном являются сложными объектами, похожими на массивы, вы вызываете символ в позиции 0. Таким образом, в основном, вы получаете такой эффект:
потому что ссылка для $string[0] это первый символ в строке «temp», или «t», так что вы действительно просто вызываете $t , Что вам нужно $<$string>[0] ,
Если вы хотите, чтобы переменная была массивом:
Если вы хотите, чтобы ваш название вашей переменной быть массивом:
Первый пример того, что, я думаю, вы пытались сделать. Второй пример того, кем вы были на самом деле делает.
Или вы можете просто использовать ассоциативный массив: