Variables
PHP Manual

Variables variables

A veces es conveniente tener nombres de variables variables. Dicho de otro modo, son nombres de variables que se pueden definir y usar dinámicamente. Una variable normal se establece con una sentencia como:

<?php
$a 
'hola';
?>

Una variable variable toma el valor de una variable y lo trata como el nombre de una variable. En el ejemplo anterior, hola, se puede usar como el nombre de una variable utilizando dos signos de dólar. Es decir:

<?php
$$a 'mundo';
?>

En este momento se han definido y almacenado dos variables en el árbol de símbolos de PHP: $a, que contiene "hola", y $hola, que contiene "mundo". Es más, esta sentencia:

<?php
echo "$a ${$a}";
?>

produce el mismo resultado que:

<?php
echo "$a $hola";
?>

esto quiere decir que ambas producen el resultado: hola mundo.

Para usar variables variables con matrices, hay que resolver un problema de ambigüedad. Si se escribe $$a[1] el intérprete necesita saber si nos referimos a utilizar $a[1] como una variable, o si se pretendía utilizar $$a como variable y el índice [1] como índice de dicha variable. La sintaxis para resolver esta ambigüedad es: ${$a[1]} para el primer caso y ${$a}[1] para el segundo.

También se puede acceder a las propiedades de la clase usando el nombre de la variable de la propiedad. El nombre de la propiedad será resuelto según donde se hizo la llamada. Por ejemplo, en esta expresión $foo->$bar, de forma local en la clase se buscará por $bar y su valor será usado como el nombre de la propiedad de $foo. Esto también es cierto si $bar es un acceso a un array.

También se pueden usar llaves para delimitar de forma clara el nombre de la propiedad. Son muy útila al acceder a valores dentro una propiedad que contiene un array, cuando el nombre de la propiedad está compuesto de múltiples partes, o cuando el nombre de la propiedad contiene caracteres que de otro modo no son válidos (p.ej. desde json_decode() o SimpleXML).

Ejemplo #1 Ejemplo de propiedad variable

<?php
class foo {
    var 
$bar 'Soy bar.';
    var 
$arr = array('Soy A.''Soy B.''Soy C.');
    var 
$r   'Soy r.';
}

$foo = new foo();
$bar 'bar';
$baz = array('foo''bar''baz''quux');
echo 
$foo->$bar "\n";
echo 
$foo->$baz[1] . "\n";

$start 'b';
$end   'ar';
echo 
$foo->{$start $end} . "\n";

$arr 'arr';
echo 
$foo->$arr[1] . "\n";
echo 
$foo->{$arr}[1] . "\n";

?>

El resultado del ejemplo sería:


Soy bar.
Soy bar.
Soy bar.
Soy r.
Soy B.

Advertencia

Por favor tenga en cuenta que las variables variables no pueden usarse con las Matrices superglobales de PHP al interior de funciones o métodos de clase. La variable $this es también una variable especial que no puede ser referenciada dinámicamente.


Variables
PHP Manual