Visão geral
No PHP, você pode simplesmente colocar um extra $
na frente de uma variável para torná-la uma variável dinâmica:
$$variableName = $value;
Embora eu não recomende, você pode encadear esse comportamento:
$$$$$$$$DoNotTryThisAtHomeKids = $value;
Você pode, mas não é forçado a colocar $variableName
entre {}
:
${$variableName} = $value;
O uso {}
é obrigatório apenas quando o nome da sua variável é uma composição de vários valores, como este:
${$variableNamePart1 . $variableNamePart2} = $value;
No entanto, é recomendável usar sempre {}
, porque é mais legível.
Diferenças entre PHP5 e PHP7
Outro motivo para usar sempre {}
é que o PHP5 e o PHP7 têm uma maneira ligeiramente diferente de lidar com variáveis dinâmicas, o que resulta em um resultado diferente em alguns casos.
No PHP7, variáveis dinâmicas, propriedades e métodos agora serão avaliados estritamente na ordem da esquerda para a direita, em oposição à combinação de casos especiais no PHP5. Os exemplos abaixo mostram como a ordem da avaliação mudou.
Caso 1 : $$foo['bar']['baz']
- Interpetação PHP5:
${$foo['bar']['baz']}
- Interpetação do PHP7:
${$foo}['bar']['baz']
Caso 2: $foo->$bar['baz']
- Interpetação PHP5:
$foo->{$bar['baz']}
- Interpetação do PHP7:
$foo->{$bar}['baz']
Caso 3: $foo->$bar['baz']()
- Interpetação PHP5:
$foo->{$bar['baz']}()
- Interpetação do PHP7:
$foo->{$bar}['baz']()
Caso 4: Foo::$bar['baz']()
- Interpetação PHP5:
Foo::{$bar['baz']}()
- Interpetação do PHP7:
Foo::{$bar}['baz']()