Що означає $$ (долар або подвійний долар) у PHP?


116

Приклад - оголошення змінної в межах функції:

global $$link;

Що $$означає?



50
він показує, скільки $$$ ви отримаєте за підтримку системи;)
RCIX


Це де-посилання на основі імені. Щось на зразок ${$link}Баша
Ondra Žižka

Відповіді:


182

Синтаксис, такий як $$variableназивається Variable Variable .


Наприклад, якщо врахувати цю частину коду:

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

Ви отримаєте такий вихід:

test


Тут:

  • $real_variable містить тест
  • $name містить ім’я змінної: 'real_variable'
  • $$nameозначає " змінна ts має своє ім'я, що міститься в$name "
    • Який є $real_variable
    • І має цінність 'test'



EDIT після коментаря @ 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
Хоча я погоджуюся, що це може бути корисно, більшість випадків краще використовувати масиви все одно.
o0 '.

Так це те саме, що робити $ {$ 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.