PHP 4.3

8.6 Lokale und globale Variablen in PHP

Im Verlauf dieser Lerneinheit haben wir erläutert, dass Sie in einer Funktion nur auf Variablen zurückgreifen können, die innerhalb der Funktion initialisiert wurden oder aber über Parameter der Funktion übergeben wurden. Aus Sichtweise der Funktion spricht man deshalb bei den in Funktionen verwandten Variablen von sogenannten lokalen Variablen. Diese lokalen Variablen können sich in ihrer Bezeichnung mit Variablen außerhalb der Funktion überschneiden - die beiden "Namensvetter" sind für einander unsichtbar und können daher keinen Einfluss aufeinander nehmen.
Ebenso ist es nicht möglich, von außerhalb auf die Werte von funktionsinternen Variablen zuzugreifen. Wir zeigen dies an folgendem Skript:

Skriptbeispiel für lokale Variablen
<?php

  $text = "Hallo Welt";
  $size = 50;

  function bigline() {
    $ergebnis = "<p style=\"font-size:" . $size . "px; font-weight: bolder;\">" . $text . "</p>";
    $zufall = "Ich möchte gerne folgende Artikel bestellen:";
    return $ergebnis;
  }

  // Und so würde man diese Funktion anwenden

  echo bigline();
  echo $zufall;

?>

Da die Variablen außerhalb der Funktion initialisiert wurden, können sie innerhalb der Funktion nicht verwendet werden. Auch die Variable, die innerhalb der Funktion initialisiert wurde, kann durch den außerhalb der Funktion stehenden Aufruf keine Ausgabe erzeugen. Nur im HTML-Quelltext sehen sie die <p ... > Anweisung, die aufgrund des leeren Inhalts ebenfalls zu keiner Ausgabe führt.

Wahrscheinlich werden Sie es bereits erahnen - neben lokalen Variablen bietet PHP die Möglichkeit, Variablen sowohl außerhalb als auch innerhalb von Funktionen verfügbar zu machen. Aus Sichtweise der Funktion spricht man deshalb von globalen Variablen.

Um die Variablen innerhalb und außerhalb der Funktion zugänglich zu machen, bietet PHP das Schlüsselwort global. Dieses Schlüsselwort ermöglicht es, außerhalb einer Funktion liegende Variablen "in die Funktion hinein" zu holen. Nur dadurch können sie auch innerhalb der Funktion ihre Gültigkeit besitzen und z.B. ausgegeben werden.

Skriptbeispiel für globale Variablen
<?php

  $text = "Hallo Welt";
  $size = 50;

  function bigline() {
    global $text;
    global $size;
    $ergebnis = "<p style=\"font-size:" . $size . "px; font-weight: bolder;\">" . $text . "</p>";
    return $ergebnis;
  }

  // Und so würde man diese Funktion anwenden

  echo bigline();

?>

Browserausgabe

Hallo Welt

Beachten Sie, dass eine Änderung der Variable, die Sie mittels global für die Funktion sichtbar gemacht haben, nicht nur für die Verwendung innerhalb der Funktion gilt, sondern auch außerhalb. Würden wir also im letzten Skriptbeispiel den Wert von $size ändern, hätte dies eben auch globale Auswirkungen.

Neben dem Ausdruck global gibt es noch eine weitere Möglichkeit, eine Variable innerhalb einer Funktion sichtbar zu machen. Hierbei wird ein Array angesprochen, das PHP automatisch anlegt und das Variablen, die außerhalb der Funktion initialisiert wurden, darin verfügbar macht: $GLOBALS. Bei diesem Array handelt es sich um ein assoziatives Array, dessen Elemente gleichlautend mit dem Variablennamen sind.

Skriptbeispiel für globale Variablen
<?php

  $text = "Hallo Welt";
  $size = 50;

  function bigline() {
    $ergebnis = "<p style=\"font-size:" . $GLOBALS["size"] . "px; font-weight: bolder;\">" . $GLOBALS["text"] . "</p>";
    return $ergebnis;
  }

  // Und so würde man diese Funktion anwenden

  echo bigline();

?>

Browserausgabe

Hallo Welt

Ein Hinweis zur Verwendung von globalen Variablen sei an dieser Stelle noch erlaubt: Die Übergabe von Parametern an eine Funktion stellt aus Gründen der Übersichtlichkeit und des Modulcharakters der Skripte den Normalfall im Umgang mit Variablen dar. Globale Variablen können gerade in komplexeren Skripten schnell zu Problemen führen, da Sie unter Umständen nicht genau wissen, welcher Wert der Variablen zum Zeitpunkt der Verarbeitung in der Funktion zugewiesen wurde. Daher sollten Sie die Arbeit mit globalen Variablen auf wenige Funktionen beschränken.

Kommentare (0)

Ihr Kommentar

Name