Обзор
В 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']()