$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;
}

?>