Start · Sprachen · PHP · Referenz · $GLOBALS

$GLOBALS

Superglobal

Assoziatives Array, das Referenzen auf alle globalen Variablen enthält, die im aktuellen Skript definiert sind.

seit PHP 4.0.0 Kategorie: http

Signatur

array $GLOBALS

Beschreibung

$GLOBALS ist eine superglobale Variable, die ein assoziatives Array aller im globalen Gültigkeitsbereich definierten Variablen enthält. Die Schlüssel sind die Variablennamen (ohne $), die Werte sind Referenzen auf die jeweiligen Variablen. Da $GLOBALS eine Superglobale ist, ist sie in jedem Gültigkeitsbereich verfügbar – auch innerhalb von Funktionen und Methoden – ohne dass global verwendet werden muss.

Typischer Anwendungsfall ist der Zugriff auf globale Variablen aus Funktionen heraus, wenn das Schlüsselwort global nicht eingesetzt werden soll oder der Variablenname dynamisch ermittelt wird. Über $GLOBALS['varName'] kann man global definierte Variablen lesen und schreiben.

Das Array enthält sich selbst als Eintrag (unter dem Schlüssel 'GLOBALS'), was in seltenen Fällen zu Verwirrung führen kann. Außerdem ist es möglich, neue globale Variablen anzulegen, indem man einen neuen Schlüssel in $GLOBALS setzt.

Wichtig: Der übermäßige Einsatz globaler Variablen gilt als schlechter Stil und erschwert Testbarkeit und Wartbarkeit. In modernem PHP sollte stattdessen Dependency Injection oder die Übergabe von Parametern bevorzugt werden.

Beispiele

Globale Variable innerhalb einer Funktion lesen und schreiben

<?php
$counter = 0;

function increment(): void {
    // Zugriff auf globale Variable ohne das Schlüsselwort 'global'
    $GLOBALS['counter']++;
}

increment();
increment();

echo $counter; // 2
2

Dynamischer Variablenname mit $GLOBALS

<?php
$foo = 'Hallo';
$bar = 'Welt';

$vars = ['foo', 'bar'];

foreach ($vars as $name) {
    echo $GLOBALS[$name] . PHP_EOL;
}
Hallo Welt

Neue globale Variable über $GLOBALS anlegen

<?php
function createGlobal(string $name, mixed $value): void {
    $GLOBALS[$name] = $value;
}

createGlobal('myVar', 42);

echo $myVar; // 42
42

// Wichtig · Fallstricke

Sicherheit: Wenn Benutzereingaben direkt als Schlüssel für $GLOBALS verwendet werden, können Angreifer unter Umständen beliebige globale Variablen überschreiben. Benutzereingaben sollten niemals ungeprüft als Array-Schlüssel in $GLOBALS eingesetzt werden.

Verhalten in PHP 8.1+: Ab PHP 8.1 ist es nicht mehr möglich, $GLOBALS selbst zu überschreiben oder als Ganzes per Referenz zu übergeben. Versuche, $GLOBALS durch eine neue Zuweisung zu ersetzen, führen zu einem fatalen Fehler.

Performance: Der Zugriff über $GLOBALS ist geringfügig langsamer als der direkte Zugriff über global $var, da ein Array-Lookup stattfindet. Dies ist in der Praxis jedoch meist vernachlässigbar.

Das Array enthält einen selbstreferenzierenden Eintrag unter dem Schlüssel 'GLOBALS', der auf dasselbe Array zeigt. Das Durchlaufen von $GLOBALS ohne Vorsicht kann daher zu unerwarteten Ergebnissen führen.