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