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