Я пытаюсь использовать динамические имена переменных (я не уверен, как они на самом деле называются), но примерно так:
for($i=0; $i<=2; $i++) {
$("file" . $i) = file($filelist[$i]);
}
var_dump($file0);
Возвращение null
говорит мне, что это не работает. Я понятия не имею, какой здесь синтаксис или техника, которую я ищу, что затрудняет исследование. $filelist
определяется ранее.
php
variables
dynamic
dynamic-variables
user1159454
источник
источник
Ответы:
Заверните их в
{}
:Рабочий пример
Использование
${}
- это способ создания динамических переменных, простой пример:источник
${'fixedTime$i'} = $row['timeInstance'];
дает вам не очень полезные$fixedTime$i
вместо того, чтобы$fixedTime1, $fixedTime2
и т. д. (К счастью, заметил это почти сразу.)обзор
В PHP вы можете просто поставить дополнительный
$
перед переменной, чтобы сделать ее динамической переменной:Хотя я бы не советовал, вы можете даже связать это поведение:
Вы можете, но не обязаны ставить
$variableName
между{}
:Использование
{}
обязательно только тогда, когда имя вашей переменной само по себе является композицией из нескольких значений, например так:Тем не менее рекомендуется всегда использовать
{}
, потому что это более читабельно.Различия между PHP5 и PHP7
Еще одна причина, по которой всегда
{}
стоит использовать , заключается в том, что PHP5 и PHP7 имеют несколько иной способ работы с динамическими переменными, что в некоторых случаях приводит к разным результатам.В PHP7 динамические переменные, свойства и методы теперь будут оцениваться строго в порядке слева направо, в отличие от сочетания особых случаев в PHP5. Приведенные ниже примеры показывают, как изменился порядок оценки.
Случай 1 :
$$foo['bar']['baz']
${$foo['bar']['baz']}
${$foo}['bar']['baz']
Случай 2:
$foo->$bar['baz']
$foo->{$bar['baz']}
$foo->{$bar}['baz']
Случай 3:
$foo->$bar['baz']()
$foo->{$bar['baz']}()
$foo->{$bar}['baz']()
Дело 4:
Foo::$bar['baz']()
Foo::{$bar['baz']}()
Foo::{$bar}['baz']()
источник
Попробуйте использовать
{}
вместо()
:источник
$price_for_monday = 10; $price_for_tuesday = 20; $today = 'tuesday'; $price_for_today = ${ 'price_for_' . $today}; echo $price_for_today; // will return 20
Я делаю это довольно часто на результатах, возвращаемых из запроса ..
например
Теперь я могу просто использовать $ MyFieldname (что проще в выражениях echo и т. Д.) Вместо $ MyQueryResult ['MyFieldname']
Да, наверное, лень, но у меня никогда не было проблем.
источник
Том, если у вас есть массив, вы можете преобразовать этот массив в объект и использовать его следующим образом:
источник
У меня есть решение для динамически созданного значения переменной и объединил все значения в переменной.
источник
Я был в положении, где у меня было 6 одинаковых массивов, и мне нужно было выбрать правильный в зависимости от другой переменной, а затем присвоить ей значения. В показанном здесь случае $ comp_cat был 'a', поэтому мне нужно было выбрать массив 'a' (у меня, конечно, также были массивы от 'b' до 'f')
Обратите внимание, что значения для позиции переменной в массиве идут после закрывающей скобки.
источник
Попробуйте использовать {} вместо ():
источник