Co oznacza $$ (dolar dolar lub podwójny dolar) w PHP?

Odpowiedzi:

183

Taka składnia $$variablenazywa się Zmienna zmienna .


Na przykład, jeśli weźmiesz pod uwagę tę część kodu:

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

Otrzymasz następujące dane wyjściowe:

test


Tutaj:

  • $real_variable zawiera test
  • $name zawiera nazwę twojej zmiennej: 'real_variable'
  • $$nameoznacza " zmienna, w której zawarta jest nazwa$name
    • Który jest $real_variable
    • I ma wartość 'test'



EDYTUJ po komentarzu @ Jhonny:

Robi $$$?
Cóż, najlepszym sposobem, aby się dowiedzieć, jest spróbować ;-)

Spróbujmy więc tej części kodu:

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

A oto wynik, który otrzymuję:

name
real_variable
test

Więc powiedziałbym, że tak, możesz to zrobić$$$ ;-)

Pascal MARTIN
źródło
10
Chociaż zgadzam się, że może to być przydatne, w większości przypadków i tak lepiej jest używać tablic.
o0 '.
czy to to samo, co robienie $ {$ value}?
Chaim
3
@Chaim: tak jest ;; poza tym, że w niektórych przypadkach wymagane są {i (jest na to przykład w podręczniku)}
Pascal MARTIN
23

Wewnętrzna $ rozwiązuje zmienną a na łańcuch, a zewnętrzna rozwiązuje zmienną za pomocą tego ciągu.

Rozważmy więc ten przykład

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

Zmienna:

$$outer

będzie równy ciągowi „foo”

Bogaty
źródło
Mimo że przyjęta odpowiedź jest dużo szersza (w tym przypadki testowe). To wyjaśnienie sprawiło, że stało się to dla mnie jaśniejsze
MariusJP
13

To zmienna zmiennej .

<?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
źródło
7

Tworzy dynamiczną nazwę zmiennej. Na przykład

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

(znany również jako zmienna zmienna )

Felix Kling
źródło
4

Nie chcę powtarzać po innych ale istnieje ryzyko używania $$:)

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

Więc używaj go z głową. :)

hsz
źródło
1

Ocenia zawartość jednej zmiennej jako nazwę innej. Zasadniczo podaje zmienną, której nazwa jest przechowywana $link.

Zach
źródło
1

to zadziałało dla mnie (w nawiasach kwadratowych):

$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ú
źródło