Sabemos que PHP utiliza la convención de prefijar los nombres de las variables con el símbolo «$». PHP también tiene la disposición de declarar variables dinámicas prefijando dos símbolos de dólar ($$) al nombre. Una variable variable (o una variable dinámica) se puede establecer y utilizar dinámicamente.

La declaración de una variable normal es así:

$a='good';

Una variable dinámica toma el valor de una variable normal y lo trata como el nombre de la variable. En el ejemplo anterior, «good» se puede usar como el nombre de una variable usando dos signos de dólar «$$» −

$$a='morning';

Ahora tenemos dos variables: «$a» con contenido «bueno» y «$$a» con contenido «mañana». Como resultado, las siguientes sentencias echo producirán el mismo resultado:

echo"$a {$$a}";echo"$a $good";

Ambos producen el mismo resultado:

good morning

Ejemplo 1

Echa un vistazo al siguiente ejemplo:

<?php  
   $a = 'good';
   $$a = 'morning';

   echo "$a {$$a}\n";
   echo "$a $good";
?>

Producirá el siguiente resultado:

good morning
good morning

Ejemplo 2

Echemos un vistazo a otro ejemplo:

<?php  
   $x = "foo";  
   $$x = "bar";  
   echo "Value of x = " .$x . "\n";  
   echo 'Value of $$x = ' . $$x . "\n";  
   echo 'Value of foo = ' . $foo;  
?>

Aquí, obtendrá el siguiente resultado:

Value of x = foo
Value of $$x = bar
Value of foo = bar

Uso de varios símbolos «$»

Tenga en cuenta que el uso del símbolo «$» no está restringido a dos. Se puede prefijar cualquier número de símbolos de dólar.

Supongamos que hay una variable «$x» con «a» como valor. A continuación, definimos $$x=’as’, luego «$$x» y «$a» tendrán el mismo valor. Del mismo modo, la instrucción $$$x=’and’ declara efectivamente una variable «$as» cuyo valor es ‘and’.

Ejemplo

Aquí hay un ejemplo completo que muestra el uso de múltiples símbolos «$».

<?php  
   $php = "a";
   $lang = "php";
   $World = "lang";
   $Hello = "World";
   $a = "Hello";
   echo '$a= ' . $a;
   echo "\n";
   echo '$$a= ' . $$a;
   echo "\n";
   echo '$$$a= ' . $$$a;
   echo "\n";
   echo '$$$$a= ' . $$$$a;
   echo "\n";
   echo '$$$$$a= ' . $$$$$a;
?>

Al ejecutar este código, se producirá el siguiente resultado:

$a= Hello
$$a= World
$$$a= lang
$$$$a= php
$$$$$a= a

Uso de variables dinámicas con matrices

El uso de variables dinámicas con matrices puede dar lugar a ciertas situaciones ambiguas. Con una matriz «a», si escribe $$a[1], entonces el analizador necesita saber si se está refiriendo a «$a[1]» como variable o si desea «$$a» como variable y luego el índice [1] de esa variable.

Para resolver esta ambigüedad, use ${$a[1]} para el primer caso y ${$a}[1] para el segundo.

Ejemplo

Echa un vistazo al siguiente ejemplo:

<?php  
   $vars = array("hw", "os", "lang");
   $var_hw="Intel";
   $var_lang="PHP";
   $var_os="Linux";

   foreach ($vars as $var)
      echo ${"var_$var"} . "\n";

   print "$var_hw\n$var_os\n$var_lang";
?>

Producirá el siguiente resultado:

Intel
Linux
PHP
Intel
Linux
PHP

Se puede notar que esta técnica no se puede usar con las matrices Superglobal de PHP (varias variables predefinidas en PHP son «superglobales», lo que significa que están disponibles en todos los ámbitos a lo largo de un script) dentro de funciones o métodos de clase. La variable «$this» es una variable especial en PHP y no se puede hacer referencia a ella dinámicamente.