Cosa significa $$ (dollaro dollaro o doppio dollaro) in PHP?


116

L'esempio è una dichiarazione di variabile all'interno di una funzione:

global $$link;

Cosa $$significa?



50
ti mostra quanto
guadagnerai


È un de-riferimento basato sul nome. Qualcosa di simile ${$link}a Bash
Ondra Žižka

Risposte:


182

Una sintassi come quella $$variableè chiamata Variable Variable .


Ad esempio, se consideri questa porzione di codice:

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

Otterrai il seguente output:

test


Qui :

  • $real_variable contiene test
  • $name contiene il nome della tua variabile: 'real_variable'
  • $$namesignifica " la variabile t ha il suo nome contenuto in$name "
    • Che è $real_variable
    • E ha il valore 'test'



MODIFICA dopo il commento di @ Jhonny:

Fare un $$$?
Bene, il modo migliore per saperlo è provare ;-)

Quindi, proviamo questa porzione di codice:

$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 />';

Ed ecco l'output che ottengo:

name
real_variable
test

Quindi, direi che, sì, puoi farlo$$$ ;-)


10
Sebbene sia d'accordo sul fatto che possa essere utile, la maggior parte delle volte è comunque meglio usare gli array.
o0 '.

quindi è la stessa cosa che fare $ {$ value}?
Chaim

3
@ Chaim: si lo è ;; tranne che, in alcuni casi, le {e }sono obbligatorie (c'è un esempio nel manuale a riguardo)
Pascal MARTIN

23

La $ interna risolve la variabile a in una stringa e quella esterna risolve una variabile in base a quella stringa.

Quindi, considera questo esempio

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

La variabile:

$$outer

sarebbe uguale alla stringa "foo"


Anche se la risposta accettata è molto più ampia (compresi i casi di test). Questa spiegazione ha reso più chiaro per me
MariusJP


7

Crea un nome di variabile dinamico. Per esempio

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

(noto anche come variabile variabile )


4

Non voglio ripetere dopo gli altri ma c'è il rischio di usare $$:)

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

Quindi usalo con la testa. :)


1

Valuta il contenuto di una variabile come nome di un'altra. Fondamentalmente ti dà la variabile il cui nome è memorizzato $link.


1

questo ha funzionato per me (racchiudere tra parentesi quadre):

$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;
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.