Ссылается на переменные глобальной области видимости

# $GLOBALS

(PHP 4, PHP 5, PHP 7, PHP 8)

$GLOBALS — Ссылается на переменные глобальной области видимости

### Описание

Ассоциативный массив (array), который содержит ссылки на каждую переменную, которую в текущий момент определили в глобальной области видимости скрипта. Имена переменных — ключи массива.

### Примеры

Пример #1 Пример использования суперглобального массива $GLOBALS

    <?php

    function test()
    {
        $foo = "Локальная переменная";

        echo 'Значение переменной $foo в глобальной области видимости: ' . $GLOBALS["foo"] . "\n";
        echo 'Значение переменной $foo в текущей области видимости: ' . $foo . "\n";
    }

    $foo = "Пример содержимого";
    test();

    ?>

Вывод приведённого примера будет похож на:

    Значение переменной $foo в глобальной области видимости: Пример содержимого
    Значение переменной $foo в текущей области видимости: Локальная переменная

Внимание

Начиная с PHP 8.1.0 доступ на запись всего массива $GLOBALS больше не поддерживается:

Пример #2 Пример записи всего массива $GLOBALS выдаёт ошибку

    <?php

    // Присваивания, которые генерируют ошибку во время компиляции:
    $GLOBALS = [];
    $GLOBALS += [];
    $GLOBALS =& $x;
    $x =& $GLOBALS;
    unset($GLOBALS);
    array_pop($GLOBALS);
    // ...и любая другая операция записи или чтения-записи в массив $GLOBALS

    ?>

### Примечания

> Замечание: Это «суперглобальная», или автоматическая глобальная, переменная. Поэтому переменная доступна во всех контекстах скрипта. Выполнять global $variable; для доступа к глобальной переменной внутри метода или функции не требуется.

> Замечание: Доступность переменной

> В противоположность остальным суперглобальным переменным, суперглобальная переменная $GLOBALS доступна в PHP в каждом месте кода.

> Замечание:

> С PHP 8.1.0 суперглобальный массив $GLOBALS стал доступной только для чтения копией глобальной таблицы символов. Поэтому глобальные переменные нельзя изменять через копию массива переменных глобальной области видимости. Раньше массив $GLOBALS исключался из обычного поведения массивов PHP по значению и глобальные переменные разрешалось изменять через копию суперглобального массива.

>     <?php

>     // До PHP 8.1.0
>     $a = 1;

>     $globals = $GLOBALS; // Как будто бы копия по значению
>     $globals['a'] = 2;
>     var_dump($a); // int(2)

>     // Начиная с PHP 8.1.0
>     // такое присваивание больше не изменяет значение переменной $a. Предыдущее поведение нарушало семантику по значению
>     $globals = $GLOBALS;
>     $globals['a'] = 1;

>     // Чтобы восстановить предыдущее поведение, перебирают копию массива и каждое свойство
>     // массива-копии присваивают переменным суперглобального массива $GLOBALS
>     foreach ($globals as $key => $value) {
>         $GLOBALS[$key] = $value;
>     }

>     ?>

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open