## 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';
    var_dump($a);

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 = 'hola';
    $$a = 'mundo';
    var_dump($hola);

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
    $a = 'hola';
    $$a = 'mundo';
    echo "$a ${$a}";

produce el mismo resultado que:

    <?php
    $a = 'hola';
    $$a = 'mundo';
    echo "$a $hola";

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

Para usar variables variables con arrays 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 una clase usando el nombre de propiedad variable. Este será resuelto dentro del ámbito del cual se hizo la llamada. Por ejemplo, en la expresión $foo->$bar, se buscará $bar en el ámibto local y se empleará su valor será 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 ejemplo anterior mostrará:

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

Por favor tenga en cuenta que las variables variables no pueden usarse con los Arrays 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.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open