PHP-Variablen-Gültigkeitsbereich verstehen
In PHP bestimmt der Gültigkeitsbereich einer Variable, wo sie im Code zugänglich und verwendbar ist. Er wird durch den Ort der Deklaration festgelegt.
Der Gültigkeitsbereich (Scope) einer Variable ist der Teil Ihres Programms, in dem diese Variable sichtbar und verwendbar ist. In PHP wird der Scope durch den Ort der Deklaration bestimmt: Eine Variable, die auf oberster Ebene eines Skripts erstellt wird, ist global, während eine Variable, die innerhalb einer Funktion erstellt wird, lokal zu dieser Funktion ist. Entscheidend — und das überrascht Menschen, die von JavaScript oder Python kommen — ist, dass PHP-Funktionen Variablen aus dem umgebenden Skript nicht automatisch sehen. Jede Funktion erhält ihren eigenen privaten Satz an Variablen.
Diese Seite behandelt die drei Gültigkeitsbereiche, die Sie im PHP-Alltag benötigen — global, lokal und statisch — sowie die zwei Möglichkeiten, innerhalb einer Funktion auf einen globalen Wert zuzugreifen (global und $GLOBALS), und wann es besser ist, stattdessen Argumente zu übergeben.
Lokale Variablen
Eine Variable, die innerhalb einer Funktion zugewiesen wird, hat lokalen Gültigkeitsbereich: Sie existiert nur, während diese Funktion ausgeführt wird, und ist überall sonst unsichtbar. Dies ist der Standardfall und der Scope, den Sie meistens verwenden sollten, da er Funktionen eigenständig und vorhersehbar hält.
<?php
function myFunction() {
$x = 10; // local to myFunction()
echo $x; // works: prints 10
}
myFunction();
echo $x; // Warning: Undefined variable $x
?>Das zweite echo schlägt fehl, weil $x außerhalb der Funktion nie existiert hat. Das Umgekehrte gilt ebenfalls: Ein $x, das im Hauptskript definiert ist, ist innerhalb von myFunction() nicht sichtbar, sofern Sie es nicht explizit einbringen. Lokale Variablen sind ideal für Zähler, Zwischenergebnisse und alles Temporäre, das nicht in den Rest des Programms durchsickern soll.
Globale Variablen
Eine Variable, die auf oberster Ebene eines Skripts — außerhalb jeder Funktion — deklariert wird, hat globalen Gültigkeitsbereich. Trotz des Namens ist sie innerhalb von Funktionen nicht automatisch verfügbar. Um sie von innerhalb einer Funktion zu lesen oder zu schreiben, müssen Sie sie mit dem Schlüsselwort global in den Gültigkeitsbereich holen.
Ohne die Zeile global $x; wäre das $x innerhalb der Funktion eine separate, undefinierte lokale Variable. Das Schlüsselwort global verknüpft den lokalen Namen mit dem globalen, sodass Änderungen innerhalb der Funktion auch den Wert außerhalb beeinflussen.
Das $GLOBALS-Array
PHP speichert auch jede globale Variable in einem eingebauten Superglobal-Array namens $GLOBALS, indiziert nach Variablennamen. Da Superglobals in jedem Gültigkeitsbereich sichtbar sind, bietet das eine zweite Möglichkeit, auf ein Global ohne das Schlüsselwort global zuzugreifen:
<?php
$x = 5;
$y = 10;
function addNumbers() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addNumbers();
echo $z; // Outputs 15
?>Hier wird $z im globalen Gültigkeitsbereich von innerhalb der Funktion erstellt. $GLOBALS ist praktisch, wenn Sie gleichzeitig auf mehrere Globals zugreifen müssen, hat aber dieselben Nachteile wie global.
Globals sparsam verwenden
Globals erzeugen versteckte Abhängigkeiten mit Fernwirkung: Jede Funktion kann sie ändern, sodass ein Fehler schwer zu verfolgen ist. Bevorzugen Sie es, Werte als Argumente zu übergeben und Ergebnisse zurückzugeben, was die Ein- und Ausgaben jeder Funktion explizit hält:
<?php
function addNumbers($a, $b) {
return $a + $b;
}
echo addNumbers(5, 10); // Outputs 15
?>Greifen Sie auf global oder $GLOBALS nur für wirklich programmweite Konfiguration zurück, nicht als Abkürzung um die Datenübergabe herum.
Statische Variablen
Normalerweise wird eine lokale Variable beim Rückgabe der Funktion zerstört und beim nächsten Aufruf neu gestartet. Eine statische Variable ist die Ausnahme: Mit dem Schlüsselwort static deklariert, behält sie ihren Wert zwischen Aufrufen bei und bleibt gleichzeitig lokal (außerhalb der Funktion unsichtbar). Sie eignet sich hervorragend, um Zustand über Aufrufe hinweg zu merken — zum Beispiel, um zu zählen, wie oft eine Funktion ausgeführt wurde.
Der Initialisierer static $x = 0; wird nur beim ersten Aufruf ausgeführt; bei späteren Aufrufen überspringt PHP ihn und verwendet den gespeicherten Wert wieder.
Statische Variablen werden mit dem Schlüsselwort static deklariert und sind nur innerhalb der Funktion zugänglich, in der sie deklariert wurden.
Fazit
Zusammenfassend lässt sich sagen, dass Variablen in PHP einen Gültigkeitsbereich haben, der bestimmt, wo sie zugänglich und verwendbar sind. Das Verständnis der verschiedenen Arten von Gültigkeitsbereichen — global, lokal und statisch — kann Ihnen helfen, effizienteren und effektiveren Code zu schreiben. Durch die Verwendung des geeigneten Gültigkeitsbereichs für Ihre Variablen können Sie sicherstellen, dass Ihr Code übersichtlich und leicht zu warten ist.