Что означает $$ (доллар доллар или двойной доллар) в PHP?


116

Пример - объявление переменной внутри функции:

global $$link;

Что $$значит?



51
он показывает вам, сколько $$$ вы получите за обслуживание системы;)
RCIX


Это отказ от ссылки на имя. Что-то вроде ${$link}Bash
Ondra ižka

Ответы:


183

Такой синтаксис, как $$variableназывается Variable Variable .


Например, если вы рассмотрите эту часть кода:

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

Вы получите следующий результат:

test


Вот :

  • $real_variable содержит тест
  • $name содержит имя вашей переменной: 'real_variable'
  • $$nameозначает " переменная, имя которой содержится в$name "
    • Который $real_variable
    • И имеет значение 'test'



ИЗМЕНИТЬ после комментария @Jhonny:

Делаете $$$?
Что ж, лучший способ узнать это - попробовать ;-)

Итак, давайте попробуем эту часть кода:

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

И вот результат, который я получаю:

name
real_variable
test

Итак, я бы сказал, что да, вы можете$$$ ;-)


10
Хотя я согласен с тем, что это может быть полезно, в большинстве случаев в любом случае лучше использовать массивы.
о0 '.

так это то же самое, что и $ {$ value}?
Хаим

3
@Chaim: да, это так ;; за исключением того, что в некоторых случаях, {и }требуется (есть пример в руководстве о том , что)
Pascal MARTIN

23

Внутренний $ преобразует переменную в строку, а внешний преобразует переменную по этой строке.

Итак, рассмотрим этот пример

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

Переменная:

$$outer

будет равно строке "foo"


Хотя принятый ответ намного шире (включая тестовые примеры). Это объяснение сделало для меня более ясным
MariusJP



4

Не хочу повторяться за другими, но есть риск использовать $$:)

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

Так что используйте это с головой. :)


1

Он оценивает содержимое одной переменной как имя другой. По сути, он дает вам переменную, имя которой хранится в $link.


1

это сработало для меня (заключите в квадратные скобки):

$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;
    }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.