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