¿Qué significa $$ (dólar dólar o dólar doble) en PHP?

Respuestas:

182

Una sintaxis como la que $$variablese llama Variable Variable .


Por ejemplo, si considera esta parte del código:

$real_variable = 'test';
$name = 'real_variable';
echo $$name;

Obtendrá el siguiente resultado:

test


Aquí :

  • $real_variable contiene prueba
  • $name contiene el nombre de su variable: 'real_variable'
  • $$namesignifica " la variable que tiene su nombre contenido en$name "
    • Cual es $real_variable
    • Y tiene el valor 'test'



EDITAR después del comentario de @ Jhonny:

Haciendo un $$$?
Bueno, la mejor forma de saberlo es intentarlo ;-)

Entonces, probemos esta parte del código:

$real_variable = 'test';
$name = 'real_variable';
$name_of_name = 'name';

echo $name_of_name . '<br />';
echo $$name_of_name . '<br />';
echo $$$name_of_name . '<br />';

Y aquí está la salida que obtengo:

name
real_variable
test

Entonces, yo diría que sí, puedes hacerlo$$$ ;-)

Pascal MARTIN
fuente
10
Si bien estoy de acuerdo en que puede ser útil, la mayoría de las veces es mejor usar matrices de todos modos.
o0 '.
entonces, ¿es lo mismo que hacer $ {$ value}?
Jaim
3
@Chaim: sí lo es ;; excepto que, en algunos casos, el {y }son necesarios (hay un ejemplo en el manual de eso)
Pascal MARTIN
23

El $ interno resuelve la variable a en una cadena, y el externo resuelve una variable por esa cadena.

Entonces, considere este ejemplo

$inner = "foo";
$outer = "inner";

La variable:

$$outer

equivaldría a la cadena "foo"

Rico
fuente
Aunque la respuesta aceptada es mucho más amplia (incluidos los casos de prueba). Esta explicación me lo hizo más claro
MariusJP
13

Es una variable de variable .

<?php
$a = 'hello';
$$a = 'world'; // now makes $hello a variable that holds 'world'
echo "$a ${$a}"; // "hello world"
echo "$a $hello"; // "hello world"
?>
Anthony Forloney
fuente
7

Crea un nombre de variable dinámica. P.ej

$link = 'foo';
$$link = 'bar';    // -> $foo = 'bar'
echo $foo;
// prints 'bar'

(también conocido como variable variable )

Felix Kling
fuente
4

No quiero repetir después de otros pero existe el riesgo de usar $$:)

$a  = '1';
$$a =  2; // $1 = 2 :)

Así que úsalo con la cabeza. :)

hsz
fuente
1

Evalúa el contenido de una variable como el nombre de otra. Básicamente, le da la variable cuyo nombre está almacenado $link.

Zach
fuente
1

esto funcionó para mí (encierre entre corchetes):

$aInputsAlias = [
        'convocatoria'   => 'even_id',
        'plan'           => 'acev_id',
        'gasto_elegible' => 'nivel1',
        'rubro'          => 'nivel2',
        'grupo'          => 'nivel3',
    ];

    /* Manejo de los filtros */

    foreach(array_keys($aInputsAlias) as $field)
    {
        $key = $aInputsAlias[$field];

        ${$aInputsAlias[$field]} = $this->request->query($field) ? $this->request->query($field) : NULL;
    }
Diego Santa Cruz Mendezú
fuente