Intereting Posts
Каков наилучший способ включить таблицу стилей для определенной страницы? jQuery Проверять использование удаленного метода для проверки того, существует ли имя пользователя Создание терминов таксономии Drupal из кода? Как разбирать файл .eml в php? Как сохранить переменную Javascript как файл на клиентском ПК Неустранимая ошибка: использование $ this, если не в контексте объекта Ошибка при рукопожатии WebSocket: неверное значение заголовка «Sec-WebSocket-Accept» с помощью PHP Динамические закладки бутстрапа с использованием PHP / MySQL Как найти правильные имена в строке? Переход на Google Fusion Tables в Google API V.1 PHP, Проверьте, существует ли URL-адрес и файл? Как преобразовать записи в таблицу в xml-формат в PHP? проблема с загрузкой изображения в codeigniter 2.1.0 Веб-чат в php без использования базы данных или файла Интеграция facebook php sdk в Facebook Canvas App, дающая пустую страницу или ошибку oauthData

Использование фигурных скобок с именами динамических переменных в PHP

Я пытаюсь использовать динамические имена переменных (я не уверен, что они на самом деле называются) Но в значительной степени это выглядит так:

for($i=0; $i<=2; $i++) { $("file" . $i) = file($filelist[$i]); } var_dump($file0); 

Возврат null который говорит мне, что он не работает. Я понятия не имею, какой синтаксис или техника, которую я ищу, здесь, что затрудняет исследование. $filelist определяется ранее.

Solutions Collecting From Web of "Использование фигурных скобок с именами динамических переменных в PHP"

Оберните их в {} :

 ${"file" . $i} = file($filelist[$i]); 

Рабочий пример


Использование ${} – это способ создания динамических переменных, простой пример:

 ${'a' . 'b'} = 'hello there'; echo $ab; // hello there 

обзор

В PHP вы можете просто добавить дополнительную переменную $ перед переменной, чтобы сделать ее динамической переменной:

 $$variableName = $value; 

Хотя я бы не рекомендовал его, вы могли бы даже связать это поведение:

 $$$$$$$$DoNotTryThisAtHomeKids = $value; 

Вы можете, но не вынуждены ставить $variableName между {} :

 ${$variableName} = $value; 

Использование {} является обязательным только в том случае, если имя вашей переменной представляет собой состав нескольких значений, например:

 ${$variableNamePart1 . $variableNamePart2} = $value; 

Тем не менее рекомендуется всегда использовать {} , потому что это более читаемо.

Различия между PHP5 и PHP7

Другая причина всегда использовать {} , заключается в том, что PHP5 и PHP7 имеют несколько иной способ работы с динамическими переменными, что в некоторых случаях приводит к другому результату.

В PHP7 динамические переменные, свойства и методы теперь будут оцениваться строго в порядке слева направо, в отличие от сочетания особых случаев в PHP5. Приведенные ниже примеры показывают, как изменился порядок оценки.

Случай 1: $$foo['bar']['baz']

  • Интерпретация PHP5: ${$foo['bar']['baz']}
  • Интерпретация PHP7: ${$foo}['bar']['baz']

Случай 2: $foo->$bar['baz']

  • Интерпретация PHP5: $foo->{$bar['baz']}
  • Интерпретация PHP7: $foo->{$bar}['baz']

Случай 3: $foo->$bar['baz']()

  • Интерпретация PHP5: $foo->{$bar['baz']}()
  • Интерпретация PHP7: $foo->{$bar}['baz']()

Случай 4: Foo::$bar['baz']()

  • Интерпретация PHP5: Foo::{$bar['baz']}()
  • Интерпретация PHP7: Foo::{$bar}['baz']()

Попробуйте использовать {} вместо () :

 ${"file".$i} = file($filelist[$i]); 

Tom, если у вас есть существующий массив, вы можете преобразовать этот массив в объект и использовать его следующим образом:

 $r = (object) $MyQueryResult; echo $r->key; 

Я делаю это довольно часто по результатам, возвращаемым из запроса.

например

 // $MyQueryResult is an array of results from a query foreach ($MyQueryResult as $key=>$value) { ${$key}=$value; } 

Теперь я могу просто использовать $ MyFieldname (что проще в выражениях эха и т. Д.), А не $ MyQueryResult ['MyFieldname']

Да, это, наверное, лениво, но у меня никогда не было никаких проблем.

У меня есть решение для динамически созданного значения переменной и объединено все значение в переменной.

 if($_SERVER['REQUEST_METHOD']=='POST'){ $r=0; for($i=1; $i<=4; $i++){ $a = $_POST['a'.$i]; $r .= $a; } echo $r; } 

Я был в положении, когда у меня было 6 одинаковых массивов, и мне нужно было выбрать правильный вариант в зависимости от другой переменной, а затем присвоить ей значения. В случае, показанном здесь, $ comp_cat был «a», поэтому мне нужно было выбрать мой массив «a» (у меня также были массивы «b» до «f»)

Обратите внимание, что значения для позиции переменной в массиве идут после закрывающей скобки.

$ {'comp_cat _'. $ comp_cat .'_ arr '} [1] [0] = "FRED BLOGGS";

$ {'comp_cat _'. $ comp_cat .'_ arr '} [1] [1] = $ file_tidy;

echo 'Первое значение массива – $. $ comp_cat_a_arr [1] [0].' а второе значение – $ comp_cat_a_arr [1] [1];