$GLOBALS
Оновлено: 12.05.2023
(PHP 4, PHP 5, PHP 7, PHP 8)
$GLOBALS - Посилається на всі змінні, доступні у глобальній області видимості
Асоціативний масив, що містить посилання на всі змінні, які наразі визначені в глобальній області видимості скрипта. Імена змінних є ключами масиву.
Приклад #1 Приклад $GLOBALS
<?php
function test() {
$foo = "local variable";
echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
echo '$foo in current scope: ' . $foo . "\n";
}
$foo = "Example content";
test();
?>
Починаючи з PHP 8.1.0, доступ на запис до всього масиву $GLOBALS більше не підтримується:
Приклад #2 запис всього $GLOBALS призведе до помилки.
<?php
// Generates compile-time error:
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x;
$x =& $GLOBALS;
unset($GLOBALS);
array_pop($GLOBALS);
// ...and any other write/read-write operation on $GLOBALS
?>
Зауважте:
Це "суперглобальна" або автоматична глобальна змінна. Це просто означає, що вона доступна у всіх областях видимості скрипта. Немає необхідності робити глобальну $змінну, щоб отримати доступ до неї у функціях або методах.
Примітка: Змінна доступність
На відміну від усіх інших суперглобалів, $GLOBALS завжди був доступний у PHP.
Зауважте:
Починаючи з версії PHP 8.1.0, $GLOBALS тепер є копією глобальної таблиці символів, доступною лише для читання. Це означає, що глобальні змінні не можуть бути змінені через її копію. Раніше масив $GLOBALS виключався зі звичайної поведінки масивів PHP за значенням і глобальні змінні можна було змінювати через його копію.
<?php
// Before PHP 8.1.0
$a = 1;
$globals = $GLOBALS; // Ostensibly by-value copy
$globals['a'] = 2;
var_dump($a); // int(2)
// As of PHP 8.1.0
// this no longer modifies $a. The previous behavior violated by-value semantics.
$globals = $GLOBALS;
$globals['a'] = 1;
// To restore the previous behavior, iterate its copy and assign each property back to $GLOBALS.
foreach ($globals as $key => $value) {
$GLOBALS[$key] = $value;
}
?>