Visión general
En PHP, solo puede poner un extra $
delante de una variable para convertirla en una variable dinámica:
$$variableName = $value;
Si bien no lo recomendaría, incluso podría encadenar este comportamiento:
$$$$$$$$DoNotTryThisAtHomeKids = $value;
Puede, pero no está obligado a poner $variableName
entre {}
:
${$variableName} = $value;
El uso {}
solo es obligatorio cuando el nombre de su variable es en sí mismo una composición de múltiples valores, como este:
${$variableNamePart1 . $variableNamePart2} = $value;
Sin embargo, se recomienda usar siempre {}
, porque es más legible.
Diferencias entre PHP5 y PHP7
Otra razón para usar siempre {}
es que PHP5 y PHP7 tienen una forma ligeramente diferente de tratar con variables dinámicas, lo que resulta en un resultado diferente en algunos casos.
En PHP7, las variables dinámicas, las propiedades y los métodos ahora se evaluarán estrictamente en orden de izquierda a derecha, a diferencia de la combinación de casos especiales en PHP5. Los siguientes ejemplos muestran cómo ha cambiado el orden de evaluación.
Caso 1 : $$foo['bar']['baz']
- Interpetación PHP5:
${$foo['bar']['baz']}
- Interpetación PHP7:
${$foo}['bar']['baz']
Caso 2: $foo->$bar['baz']
- Interpetación PHP5:
$foo->{$bar['baz']}
- Interpetación PHP7:
$foo->{$bar}['baz']
Caso 3: $foo->$bar['baz']()
- Interpetación PHP5:
$foo->{$bar['baz']}()
- Interpetación PHP7:
$foo->{$bar}['baz']()
Caso 4: Foo::$bar['baz']()
- Interpetación PHP5:
Foo::{$bar['baz']}()
- Interpetación PHP7:
Foo::{$bar}['baz']()