1. Home
  2. Docs
  3. PHP
  4. PHP Variablen
  5. Variable Scope

Variable Scope

In PHP bestimmt der Scope oder Bereich einer Variablen, in welchen Teilen des Codes sie zugänglich ist. Es gibt unterschiedliche Gültigkeitsbereiche für Variablen in PHP, und ein fundiertes Verständnis darüber ist wichtig, um Fehler bei der Variablenverwendung zu vermeiden und den Code sauber und wartbar zu halten. Die wichtigsten Variablenbereiche in PHP sind:

  1. Lokaler Scope: Variablen innerhalb von Funktionen und Codeblöcken
  2. Globaler Scope: Variablen, die außerhalb von Funktionen deklariert wurden
  3. Statischer Scope: Spezielle Variablen in Funktionen, die ihren Wert zwischen Aufrufen behalten
  4. Superglobaler Scope: Vordefinierte PHP-Variablen, die überall zugänglich sind

Lokaler Scope

Variablen, die innerhalb einer Funktion deklariert werden, sind nur innerhalb dieser Funktion zugänglich und existieren nur während der Ausführung der Funktion. Diese Variablen können außerhalb der Funktion nicht aufgerufen werden und verursachen dort einen Fehler.

<?php
function berechneSumme() {
    $summe = 10 + 20;  // Lokale Variable
    echo $summe;
}

berechneSumme(); // Gibt 30 aus
echo $summe;     // Fehler, $summe ist außerhalb der Funktion nicht verfügbar
?>

In diesem Beispiel ist $summe eine lokale Variable, die nur innerhalb der Funktion berechneSumme existiert.

Globaler Scope

Globale Variablen werden außerhalb von Funktionen und Klassen definiert und sind nur im globalen Kontext verfügbar. Innerhalb von Funktionen können sie nur verwendet werden, wenn sie explizit als global deklariert werden.

<?php
$globalVar = "Ich bin global";

function zeigeGlobal() {
    global $globalVar;
    echo $globalVar;  // Funktioniert, da $globalVar als global deklariert wurde
}

zeigeGlobal();       // Gibt "Ich bin global" aus
?>

Ohne das Schlüsselwort global wäre die Variable $globalVar in der Funktion zeigeGlobal nicht verfügbar, da sie außerhalb der Funktion definiert wurde.

Statischer Scope

Normale lokale Variablen werden bei jedem Funktionsaufruf neu initialisiert. Wenn jedoch der Wert einer Variablen zwischen Funktionsaufrufen erhalten bleiben soll, kann static verwendet werden. Statische Variablen behalten ihren Wert und eignen sich gut, um z. B. den Status einer Funktion zu speichern.

<?php
function aufrufCounter() {
    static $counter = 0;  // Statische Variable
    $counter++;
    echo "Aufrufnummer: $counter<br>";
}

aufrufCounter(); // Ausgabe: Aufrufnummer: 1
aufrufCounter(); // Ausgabe: Aufrufnummer: 2
aufrufCounter(); // Ausgabe: Aufrufnummer: 3
?>

Durch das Schlüsselwort static wird die Variable $counter nicht bei jedem Funktionsaufruf neu initialisiert, sondern behält ihren Wert.

Superglobaler Scope

PHP stellt spezielle Superglobale Variablen zur Verfügung, die unabhängig vom Variablenbereich überall im Skript verfügbar sind. Diese Variablen enthalten wichtige Informationen und Daten, z. B. Formulardaten, Cookie-Informationen und Serverdetails. Wichtige Superglobale Variablen in PHP sind:

  • $_POST: Enthält Daten, die mit der HTTP-POST-Methode gesendet wurden.
  • $_GET: Enthält Daten, die mit der HTTP-GET-Methode gesendet wurden.
  • $_SESSION: Enthält Sitzungsdaten, die während der gesamten Benutzersitzung verfügbar sind.
  • $_COOKIE: Enthält Cookie-Daten, die im Browser des Benutzers gespeichert sind.
  • $_SERVER: Enthält Server- und Umgebungsinformationen.
  • $_REQUEST: Beinhaltet alle GET-, POST- und COOKIE-Daten.

Beispiel für die Verwendung einer Superglobalen Variable

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = $_POST['name'];
    echo "Hallo, $name!";
}
?>

In diesem Beispiel wird die Superglobale $_POST verwendet, um Benutzereingaben aus einem Formular abzurufen.

Zusammenfassung der Variablenbereiche und Best Practices

  1. Lokale Variablen verwenden, um ungewollte Nebeneffekte zu vermeiden.
  2. Globale Variablen minimieren, da sie die Code-Wartbarkeit erschweren.
  3. Statische Variablen gezielt einsetzen, um Werte zwischen Funktionsaufrufen zu speichern.
  4. Superglobale Variablen sind nützlich für Daten, die skriptübergreifend verfügbar sein müssen, sollten aber immer validiert werden, um Sicherheitsrisiken zu minimieren.

Häufig gestellte Fragen

Was passiert, wenn ich eine globale Variable ohne global-Schlüsselwort in einer Funktion verwende?

Die Funktion erkennt die globale Variable nicht und erzeugt stattdessen eine eigene, lokale Version der Variable. Um die globale Variable innerhalb der Funktion zu verwenden, muss sie mit global deklariert werden.

Kann eine statische Variable außerhalb der Funktion aufgerufen werden?

Nein, statische Variablen sind immer nur innerhalb der Funktion sichtbar, in der sie deklariert wurden, behalten jedoch ihren Wert bei, wenn die Funktion erneut aufgerufen wird.

Warum sollte ich globale Variablen vermeiden?

Globale Variablen können den Code schwer verständlich machen und sind oft eine Ursache für schwer nachvollziehbare Fehler. Es ist größtenteils besser, Werte über Parameter oder Rückgabewerte zwischen Funktionen zu übergeben.

Was ist der Vorteil von Superglobalen Variablen?

Superglobale Variablen bieten eine einfache Möglichkeit, auf wichtige Daten wie Formulardaten oder Serverinformationen zuzugreifen, ohne sie explizit an eine Funktion übergeben zu müssen.

Wie sichere ich Superglobale Variablen ab?

Da Superglobale Variablen potenziell Benutzereingaben enthalten, sollten sie immer gründlich validiert und aufbereitet werden, um Sicherheitsrisiken wie SQL-Injections oder Cross-Site Scripting (XSS) zu verhindern.