Geltungsbereich (Scope) von Variablen in PHP

Erste Schritte: Geltungsbereich (Scope) von Variablen in PHP

In PHP ist die Geltungsbereich (Scope) einer Variable
entscheidend dafür, an welchen Stellen im Code du sie verwenden kannst.
Eine Variable, die du in einem Funktionskörper deklarierst, unterscheidet sich in
ihrem Geltungsbereich von einer Variable, die du im globalen Kontext oder als
static definierst. In diesem Tutorial lernst du die verschiedenen
Scopes in PHP kennen und wie du Variablen entsprechend nutzen kannst.


1. Globale Variablen

Variablen, die du außerhalb von Funktionen oder Klassen
deklarierst, nennt man globale Variablen. Sie stehen im globalen
Scope
. Allerdings kannst du innerhalb einer Funktion nicht direkt
auf globale Variablen zugreifen, ohne spezielle Tricks zu verwenden.

$name = "Lisa";  // globale Variable

function zeigeName() {
    // echo $name; // Fehler, da Variable im lokalen Scope nicht definiert
}

zeigeName();

In diesem Fall würde $name innerhalb der Funktion nicht erkannt, weil
PHP davon ausgeht, dass du lokale Variablen nutzen möchtest.


2. Lokale Variablen

Jede Variable, die du innerhalb einer Funktion definierst,
gehört zum lokalen Scope (dieser Funktion). Der Wert ist nur in dieser
Funktion sichtbar und verfügbar.

function testFunktion() {
    $zahl = 5; // lokale Variable
    echo $zahl; 
}
// echo $zahl; // Fehler, $zahl existiert nicht außerhalb der Funktion

Sobald die Funktion endet, wird die lokale Variable zerstört und ist nicht mehr
zugreifbar.


3. Zugriff auf globale Variablen in Funktionen

Willst du in einer Funktion explizit auf eine globale Variable zugreifen, musst
du sie per global-Anweisung bekannt machen:

$name = "Max";

function zeigeGlobalName() {
    global $name;   // Erlaubt Zugriff auf $name aus dem globalen Scope
    echo $name;
}

zeigeGlobalName(); // "Max"
  • global $name; bindet die globale Variable $name in den lokalen Scope ein.
  • Da dies schnell unübersichtlich werden kann, ist es besser, Werte als
    Parameter an eine Funktion zu übergeben.

4. Superglobales Array $GLOBALS

Mit $GLOBALS hast du Zugriff auf alle globalen Variablen in einem
assoziativen Array. Der Key entspricht dem Variablennamen.

$zahl = 10;

function nutzeGlobals() {
    echo $GLOBALS['zahl'];  // 10
}
nutzeGlobals();

Auch das sollte man sparsam verwenden, da es schnell zu unübersichtlichem Code
führt.


5. Statische Variablen

Normalerweise wird eine lokale Variable in einer Funktion nach deren Ende
gelöscht. Mit static kann man dafür sorgen, dass sie erhalten
bleibt und ihren Wert beim erneuten Funktionsaufruf beibehält.

function zaehler() {
    static $count = 0;  // Behalten ihren Wert zwischen Aufrufen
    $count++;
    echo $count . "<br>";
}

zaehler(); // 1
zaehler(); // 2
zaehler(); // 3
  • static $count wird nur einmal initialisiert.
  • Bei jedem weiteren Aufruf der Funktion wird $count inkrementiert,
    ohne dass er zurückgesetzt wird.

6. Geltungsbereich in Klassenmethoden

Wenn du in Klassen arbeitest, gelten nochmals besondere Regeln:

class Test {
    private $wert = 10; // Instanzvariable (Eigenschaft)

    public function show() {
        echo $this->wert; // Zugriff mit $this->variableName
    }
}

$obj = new Test();
$obj->show();  // 10
  • $this->wert ist im Scope der Instanz, nicht global.
  • Variablen in Methoden ohne global/Parameter können nicht direkt auf
    globale Variablen zugreifen, ähnlich wie bei normalen Funktionen.

7. Zusammenfassung der Scopes

  • Globaler Scope: Variablen außerhalb von Funktionen.
    In Funktionen nur via global oder $GLOBALS erreichbar.
  • Lokaler Scope: Variablen in einer Funktion. Nicht außerhalb nutzbar.
  • Static: Lokale Variablen, die ihren Wert zwischen Funktionsaufrufen behalten.
  • Klassen-/Objektscope: Variablen (Eigenschaften) innerhalb von
    Methoden nur mit $this-> aufrufbar.

8. Praktisches Beispiel

$message = "Hallo Welt";

function printMessage() {
    global $message;
    echo $message; // Zugriff via global
}

function printLocal() {
    $message = "Lokale Nachricht";
    echo $message;  // Gibt nur "Lokale Nachricht" aus
}

printMessage(); // "Hallo Welt"
printLocal();   // "Lokale Nachricht"

Hier siehst du klar den Unterschied zwischen einer globalen Variable und einer
lokalen Version desselben Namens.


Best Practices

  • Werte als Parameter übergeben: Statt globaler Variablen ist es
    oft sinnvoller, Daten explizit an Funktionen oder Methoden zu übergeben.
  • Vorsicht mit global: Globalen Variablen können den Code
    unübersichtlich machen und zu Nebenwirkungen führen.
  • Static nur, wenn nötig: static kann nützlich sein (z. B.
    für Zähler), aber vermeide es, wenn du das gleiche Verhalten über
    datenbankbasierte oder Sessions abbilden willst.

Fazit

In PHP hängt die Sicht- und Nutzbarkeit einer Variable stark vom Scope
ab. Verstehe, ob eine Variable global, lokal oder
statisch ist, um Bugs und ungewolltes Überschreiben zu vermeiden.
Mit durchdachtem Einsatz von Parametern in Funktionen und möglichst wenig
global bist du auf dem besten Weg zu sauberen, gut strukturierten Skripten.