$GLOBALS
(PHP 4, PHP 5, PHP 7, PHP 8)
$GLOBALS — Referenziert alle Variablen, die im globalen Gültigkeitsbereich vorhanden sind
Beschreibung
Ein assoziatives Array, das Referenzen auf alle Variablen enthält, die derzeit im globalen Gültigkeitsbereich (Scope) des Skripts bekannt sind. Die Namen der jeweiligen Variablen sind die Schlüsselwerte, um auf den Inhalt der jeweils referenzierten Variablen zuzugreifen.
Beispiele
Beispiel #1 $GLOBALS-Beispiel
<?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();
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
$foo in global scope: Example content $foo in current scope: local variable
Seit PHP 8.1.0 wird der Schreibzugriff auf das gesamte $GLOBALS-Array nicht mehr unterstützt:
Beispiel #2 Das Schreiben des gesamten $GLOBALS führt zu einem Fehler
<?php
// Erzeugt einen Kompilierungsfehler:
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x;
$x =& $GLOBALS;
unset($GLOBALS);
array_pop($GLOBALS);
// ...und jede andere Schreib-/Lese-Schreiboperation auf $GLOBALS
?>
Anmerkungen
Hinweis:
Dies ist eine 'Superglobale' oder automatisch globale Variable. Dies bedeutet, dass sie innerhalb des Skripts in jedem Geltungsbereich sichtbar ist. Es ist nicht nötig, sie mit global $variable bekannt zu machen, um aus Funktionen oder Methoden darauf zuzugreifen.
Hinweis: Verfügbarkeit der Variablen
Im Gegensatz zu allen anderen Superglobals ist $GLOBALS notwendigerweise immer in PHP verfügbar.
Hinweis:
Seit PHP 8.1.0 ist $GLOBALS eine schreibgeschützte Kopie der globalen Symboltabelle. Das heißt, globale Variablen können nicht über diese Kopie verändert werden. Zuvor war das Array $GLOBALS vom üblichen Verhalten der Wertübergabe (by-value) von PHP-Arrays ausgenommen und globale Variablen konnten über seine Kopie geändert werden.
<?php
// Vor PHP 8.1.0
$a = 1;
$globals = $GLOBALS; // Eine by-value-Kopie
$globals['a'] = 2;
var_dump($a); // int(2)
// Seit PHP 8.1.0
// $a wird dadurch nicht mehr verändert. Das vorherige Verhalten verletzte die Semantik von by-value.
$globals = $GLOBALS;
$globals['a'] = 1;
// Um das vorherige Verhalten wiederherzustellen, durchlaufen Sie die Kopie und übertragen jede Eigenschaft zurück auf $GLOBALS.
foreach ($globals as $key => $value) {
$GLOBALS[$key] = $value;
}
?>