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

?>