O que $$ (dólar ou dólar duplo) significa em PHP?

116

O exemplo é uma declaração de variável dentro de uma função:

global $$link;

O que isso $$significa?

chicane
fonte
50
mostra quanto $$$ você receberá pela manutenção do sistema;)
RCIX
2
(relacionado) O que esse símbolo significa em PHP
Gordon
É uma des-referência baseada no nome. Algo como ${$link}em Bash
Ondra Žižka

Respostas:

181

Uma sintaxe como $$variableé chamada de Variável Variável .


Por exemplo, se você considerar esta parte do código:

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

Você obterá a seguinte saída:

test


Aqui :

  • $real_variable contém teste
  • $name contém o nome da sua variável: 'real_variable'
  • $$namesignifica " a variável que tem seu nome contido em$name "
    • Qual é $real_variable
    • E tem o valor 'test'



EDITAR após o comentário de @Jhonny:

Fazendo um $$$?
Bem, a melhor maneira de saber é tentar ;-)

Então, vamos tentar esta parte do 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 />';

E aqui está o resultado que obtenho:

name
real_variable
test

Então, eu diria que sim, você pode fazer$$$ ;-)

Pascal MARTIN
fonte
10
Embora eu concorde que pode ser útil, na maioria das vezes é melhor usar matrizes de qualquer maneira.
o0 '.
então isso é a mesma coisa que fazer $ {$ value}?
Chaim
3
@Chaim: é sim ;; exceto que, em alguns casos, os {e }são obrigatórios (há um exemplo no manual sobre isso)
Pascal MARTIN
23

O $ interno resolve a variável a em uma string, e o externo resolve uma variável por essa string.

Então, considere este exemplo

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

A variável:

$$outer

seria igual à string "foo"

Rico
fonte
Mesmo que a resposta aceita seja muito mais ampla (incluindo casos de teste). Essa explicação deixou tudo mais claro para mim
MariusJP
13

É uma variável de variável .

<?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
fonte
7

Ele cria um nome de variável dinâmica. Por exemplo

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

(também conhecido como variável variável )

Felix Kling
fonte
4

Não quero repetir depois dos outros, mas existe o risco de usar $$:)

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

Portanto, use-o com a cabeça. :)

hsz
fonte
1

Ele avalia o conteúdo de uma variável como o nome de outra. Basicamente, ele fornece a variável cujo nome está armazenado $link.

Zach
fonte
1

isso funcionou para mim (coloque entre colchetes):

$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ú
fonte