Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Sprachelemente und Syntax  Teil von  Variablen
Letztes Update: 04.09.2007 20:49:50

Navigation

Seite Startseite
Seite Aktuelles
Seite Seite News*
Seite Seite Pressemitteilungen*
Seite SELFPHP
Seite Seite Über SELFPHP
Seite Seite Werbung
Seite Seite Kontakt
Seite Seite Unsere Banner
Seite Seite Impressum
Seite Qozido
Seite Seite Diving Edition
Seite Seite Snorkeling Edition
Seite SELFPHP Dokumentation
Seite Seite PHP-Skripte
Seite Seite PHP Befehlsreferenz
Seite Seite PHP 5 Praxisbuch
Seite Seite PHP Code Snippets
Seite Seite SELFPHP in Buchform
Seite Anbieterverzeichnis
Seite Seite Globale Branchen
Seite Seite Webhosting/Server
Seite Services
Seite Seite Forum*
Seite Seite RSS-Feeds*
Seite Seite Downloads*
Seite Seite Gratis-Video-Lektionen*
Seite Seite SELFPHP auf Heft-CD*
Seite Seite Newsletter*
Seite Internet Security
 sponsored by  
Seite Stellenangebote*
Sedo - Bei uns wird PHP großgeschrieben
Seite Premium-Partner   
Webhosting/Serverlösungen
Seite Produktempfehlung   
Seite Seite SteadyBackup

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  
 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 100.000 Beiträgen finden Sie sicher die passende Antwort!*  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!*

Vorname: 
Name:
E-Mail:
 




 

Gültigkeitsbereiche und Sichtbarkeit von Variablen




Ein wichtiges Thema im Zusammenhang mit Variablen ist deren Gültigkeitsbereich und Sichtbarkeit. Generell gilt, dass in PHP Variablen immer nur in ihrem lokalen Kontext sichtbar sind.

Dieser beinhaltet auch den Bereich für Dateien, die per include- oder require-Anweisung eingebunden wurden, z. B.:

$autor = "Matthias";
include "buch.inc.php";

Die Variable $autor ist auch in der eingebundenen Datei buch.inc.php verfügbar. Eine innerhalb einer Funktion definierte Variable ist außerhalb der Funktion nicht sichtbar. Umgekehrt gilt dasselbe, d. h., eine außerhalb sämtlicher Funktionsblöcke global definierte Variable hat innerhalb eines Funktionsblocks keine Gültigkeit.

Beispiel

<?php
// Globaler Bereich
$preis = 9.99;
function berechne() {
  // Referenz auf einen lokalen Bereich
  return $preis;
}
$betrag = berechne();
if ($betrag) {
  echo $betrag;
} else {
  echo "Keine Ausgabe, die Variable ist lokal nicht sichtbar!";
}
?>

Ausgabe
Keine Ausgabe, die Variable ist lokal nicht sichtbar!

Um zu erreichen, dass die globale Variable $preis auch lokal innerhalb der Funktion berechne bekannt ist, muss diese explizit mithilfe des Schlüsselworts global innerhalb der Funktion bekannt gemacht werden, man lädt sie sozusagen ein.

Beispiel

<?php
$preis = 9.99;
function berechne() {
  global $preis;
  return $preis;
}
$betrag = berechne();
if ($betrag) {
  echo $betrag;
} else {
  echo "Keine Ausgabe, die Variable ist lokal nicht sichtbar!";
}
?>

Ausgabe
9.99

Hinweis: Auf den Einsatz und die Verwendung von Funktionen wird im Abschnitt 3.8 »Funktionen und Prozeduren eingegangen«.


Zugriff über $GLOBALS

Eine andere Möglichkeit, im lokalen Kontext einer Funktion auf eine globale Variable zuzugreifen, steht über das von PHP definierte Array $GLOBALS zur Verfügung.

Hierbei handelt es sich um ein assoziatives Array, das die Namen der globalen Variablen als Schlüsselwörter verwendet. Den Zugriff innerhalb des lokalen Kontextes einer Funktion über das Array $GLOBALS auf die lokale Variable $preis zeigt folgendes Beispiel:

<?php
$preis = 9.99;
function berechne() {
  return $GLOBALS[preis];
}
echo berechne();
?>

Ausgabe
9.99



Speicherklassen von Variablen

Eine weitere wichtige Eigenschaft von Variablen ist deren Speicherklasse. Normale Variablen verlieren beim Verlassen des lokalen Kontextes ihren Wert und werden beim Wiedereintritt neu initialisiert.

Sollen Variablen auch nach dem Verlassen eines Funktionsblocks ihren Wert behalten, müssen sie mithilfe des Schlüsselworts static als statische Variablen deklariert werden.

Im folgenden Beispiel hat die Variable $zaehler keine statische Lebensdauer, sie wird bei jedem Neueintritt in den Funktionsblock erneut initialisiert. Das Ergebnis der Ausgabe bleibt trotz zweimaligen Aufrufs der Funktion setzeZaehler() 1.

<?php
function setzeZaehler() {
  $zaehler = 0;
  $zaehler++;
  return $zaehler;
}
$zustand1 = setzeZaehler();
// Ausgabe (1)
echo $zustand1;
$zustand2 = setzeZaehler();
// Ausgabe (1)
echo $zustand2;
?>

Wird die Variable $zaehler jedoch als statisch erklärt, behält sie auch nach dem Verlassen des Funktionsblocks und dem Wiedereintritt bei einem erneuten Aufruf der Funktion setzeZaehler() ihren Wert, sodass sich, wie das folgende Beispiel zeigt, ein anderes Ergebnis einstellt:

<?php
function setzeZaehler() {
  static $zaehler = 0;
  $zaehler++;
  return $zaehler;
}
$zustand1 = setzeZaehler();
// Ausgabe (1)
echo $zustand1;
$zustand2 = setzeZaehler();
// Ausgabe (2)
echo $zustand2;
?>

Eine weitere interessante Anwendung in diesem Zusammenhang sind rekursive Funktionen. Dies sind Funktionen, die sich aus sich selbst heraus aufrufen. Hierbei besteht die Gefahr, sogenannte Endlosschleifen bzw. Endlosrekursionen zu programmieren, welche die Performance des jeweiligen Systems äußerst negativ beeinflussen. Sie müssen also einen Weg vorsehen, diese Rekursion zu beenden. Die folgende Funktion setzeZaehler() zählt rekursiv bis 10. Die statische Variable $zaehler wird benutzt, um die Rekursion zu beenden:

<?php
function setzeZaehler() {
  static $zaehler = 0;

  $zaehler++;
  echo $zaehler;
  if ($zaehler < 10) {
    setzeZaehler();
  }
}
// Ausgabe (12345678910)
setzeZaehler();
?>

Achtung: Sollten Sie keine statische Variable verwenden, kommt es zu einer Endlosschleife.


 




 sponsored by

Sedo - Bei uns wird PHP großgeschrieben


VERIO - An NTT Communications Company


HighText iBusiness


Webspace-Verkauf.de


video2brain




 Premium-Partner
 Webhosting/Serverlösungen

BPI-Systeme


Premium-Partner Pixel X


Premium-Partner First Colo


Premium-Partner dogado Internet




Qozido


© 2001-2008 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt