PHP-Superglobals und die $_GLOBALS-Variable verstehen
PHP bietet Superglobals – eingebaute Variablen, die in jedem Gültigkeitsbereich verfügbar sind. Erfahren Sie, wie $GLOBALS funktioniert.
In PHP lebt eine Variable, die außerhalb einer Funktion deklariert wird, im globalen Gültigkeitsbereich. Standardmäßig kann Code innerhalb einer Funktion diese Variablen nicht sehen — PHP hält den Funktionsgültigkeitsbereich separat, damit lokale Logik keine fremden Daten versehentlich überschreibt. Das $GLOBALS-Array ist eine Möglichkeit, diese Grenze zu überwinden: Es ist ein eingebautes Superglobal, das eine Referenz auf jede im globalen Gültigkeitsbereich definierte Variable enthält, indiziert nach Variablenname.
Diese Seite erklärt, was $GLOBALS ist, wie es sich vom Schlüsselwort global unterscheidet, wie man globale Variablen darüber liest und ändert und warum man in der Regel lieber eine Alternative verwenden sollte. Wenn Sie generell neu beim Thema Gültigkeitsbereiche sind, beginnen Sie mit Gültigkeitsbereich von Variablen und PHP-Variablen.
Was sind PHP-Superglobals?
Superglobals sind spezielle, vordefinierte PHP-Variablen, die in allen Gültigkeitsbereichen eines Skripts verfügbar sind. Sie können sie innerhalb jeder Funktion, Methode oder eingebundenen Datei lesen, ohne sie vorher mit global zu deklarieren. Sie werden von PHP automatisch befüllt, bevor Ihr Code ausgeführt wird.
Die vollständige Liste der Superglobals:
$_GET— Daten, die über den URL-Abfragestring übergeben werden.$_POST— Daten, die über eine Formularübermittlung übergeben werden.$_COOKIE— Daten, die über Cookies übergeben werden.$_SESSION— Daten, die in der Sitzung des Benutzers gespeichert sind.$_REQUEST— kombinierte Daten aus$_GET,$_POSTund$_COOKIE.$_SERVER— Informationen über den Server und die Ausführungsumgebung.$_ENV— Umgebungsvariablen.$_FILES— Elemente, die über ein HTTP-POST-Formular hochgeladen wurden.$GLOBALS— eine Referenz auf jede Variable im globalen Gültigkeitsbereich.
Einen Überblick über die anfragebezogenen Superglobals finden Sie unter PHP-Superglobals.
Was ist die $GLOBALS-Variable in PHP?
$GLOBALS ist ein assoziatives Array, dessen Schlüssel die Namen Ihrer globalen Variablen sind (ohne das führende $) und dessen Werte Referenzen auf diese Variablen sind. Da es ein Superglobal ist, funktioniert es von überall — $GLOBALS['x'] liest also denselben Speicher wie das globale $x, egal wo im Skript Sie darauf zugreifen.
Hier ist ein Beispiel, wie die $GLOBALS-Variable verwendet werden kann, um auf eine globale Variable zuzugreifen:
PHP-Beispiel zur Verwendung der $GLOBALS-Variable für den Zugriff auf eine globale Variable
<?php
$x = 10;
$y = 20;
function add() {
global $x, $y;
return $x + $y;
}
echo add(); // 30
echo $GLOBALS['x']; // 10
echo $GLOBALS['y']; // 20
?>In diesem Beispiel verwendet die Funktion add() das Schlüsselwort global, um auf die Variablen $x und $y zuzugreifen. Außerhalb der Funktion erreichen $GLOBALS['x'] und $GLOBALS['y'] exakt dieselben Variablen — ohne global-Deklaration.
$GLOBALS vs. das Schlüsselwort global
Diese beiden Ansätze erledigen dieselbe Aufgabe, aber auf unterschiedliche Weise:
- Das Schlüsselwort
globalimportiert eine globale Variable in den lokalen Gültigkeitsbereich und erstellt einen lokalen Alias, den Sie dann über den normalen Namen ($x) verwenden. Sie müssen jede gewünschte Variable aufführen. $GLOBALSist ein Array, das Sie nach Name indizieren ($GLOBALS['x']). Sie deklarieren nichts, und Sie können den Schlüssel dynamisch aufbauen (zum Beispiel$GLOBALS[$name]).
<?php
$total = 100;
function withGlobalKeyword() {
global $total;
return $total; // uses the local alias
}
function withGlobalsArray() {
return $GLOBALS['total']; // indexes the superglobal directly
}
echo withGlobalKeyword(); // 100
echo "\n";
echo withGlobalsArray(); // 100
?>Beide geben 100 aus. Bevorzugen Sie, was klarer lesbar ist — beachten Sie jedoch, dass Sie ab PHP 8.1 das $GLOBALS-Array nicht mehr als Ganzes neu zuweisen können (z. B. $GLOBALS = [...]). Das Schreiben einzelner Elemente wie $GLOBALS['x'] = 5 funktioniert weiterhin.
So verwenden Sie die $GLOBALS-Variable in PHP
Die $GLOBALS-Variable ist ein leistungsstarkes Werkzeug in der PHP-Programmierung, mit dem Sie von jedem Teil Ihres Skripts aus auf globale Variablen zugreifen können. Hier sind einige Möglichkeiten zur Verwendung der $GLOBALS-Variable:
Auf globale Variablen zugreifen
Wie wir im vorherigen Beispiel gesehen haben, können Sie die $GLOBALS-Variable verwenden, um auf jede in Ihrem Skript definierte globale Variable zuzugreifen. Hier ist ein weiteres Beispiel:
PHP – Zugriff auf eine beliebige globale Variable in Ihrem Skript
Globale Variablen ändern
Die $GLOBALS-Variable kann auch verwendet werden, um globale Variablen zu ändern. Das kann nützlich sein, wenn Sie Änderungen an einer globalen Variable innerhalb einer Funktion oder Klasse vornehmen müssen.
Hier ist ein Beispiel:
PHP – globale Variablen ändern
<?php
$counter = 0;
function increment() {
global $counter;
$counter++;
}
increment();
echo $counter; // 1
echo "\n";
$GLOBALS['counter'] = 10;
echo $counter; // 10
?>In diesem Beispiel erhöht die Funktion increment() den Wert der Variable $counter. Sie können den Wert der Variable $counter jedoch auch direkt über die $GLOBALS-Variable ändern.
Variablen zwischen Funktionen und Klassen übergeben
Die $GLOBALS-Variable kann auch verwendet werden, um Variablen zwischen Funktionen und Klassen zu übergeben. Das kann nützlich sein, wenn Sie Daten zwischen verschiedenen Teilen Ihres Skripts teilen müssen.
Hier ist ein Beispiel:
PHP – globale Variablen zwischen Funktionen und Klassen übergeben
<?php
$data = array("name" => "John Doe", "age" => 30);
function display_data() {
global $data;
print_r($data);
}
class User {
function show_data() {
global $data;
print_r($data);
}
}
display_data(); // Array ( [name] => John Doe [age] => 30 )
$user = new User();
$user->show_data(); // Array ( [name] => John Doe [age] => 30 )
$GLOBALS['data']['email'] = "[email protected]";
display_data(); // Array ( [name] => John Doe [age] => 30 [email] => [email protected] )
$user->show_data(); // Array ( [name] => John Doe [age] => 30 [email] => [email protected] )
?>In diesem Beispiel greifen die Funktion display_data() und die Klasse User beide über die $GLOBALS-Variable auf die Variable $data zu. Dadurch können Sie die Variable $data zwischen den verschiedenen Teilen Ihres Skripts weitergeben.
Fazit
Die $GLOBALS-Variable ist ein leistungsstarkes Werkzeug in der PHP-Programmierung, das Zugriff auf alle in einem PHP-Skript definierten globalen Variablen bietet. Ob Sie Variablen abrufen, ändern oder zwischen Funktionen und Klassen weitergeben — $GLOBALS ist ein vielseitiges Werkzeug, das Ihnen hilft, besseren PHP-Code zu schreiben.
Hinweis zu Best Practices: Obwohl $GLOBALS nützlich ist, wird die starke Abhängigkeit von globalen Variablen in der modernen PHP-Entwicklung generell nicht empfohlen. Globaler Zustand erschwert das Testen und die Nachvollziehbarkeit von Code, da jede Funktion unbemerkt einen Wert ändern kann, von dem ein anderer Teil des Programms abhängt. Bevorzugen Sie das Übergeben von Variablen als Funktionsargumente, das Zurückgeben von Werten oder die Verwendung von Klasseneigenschaften für bessere Kapselung und Testbarkeit. Greifen Sie auf $GLOBALS hauptsächlich für schnelle Skripte oder bei der Arbeit mit Legacy-Code zurück.