Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Variablen
Letztes Update: 16.08.2005 17:53:45


Navigation

Seite News *

Seite Startseite
Seite Über SELFPHP
Seite Werbung
Seite Kontakt
Seite Forum *
Seite Download *
Seite SELFPHP Banner *
Seite SELFPHP in Buchform
Seite Newsletter *
Seite Impressum

 
* Link führt ins Internet



 

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 nun 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 ausserhalb der Funktion nicht sichtbar. Umgekehrt gilt dasselbe, d.h. eine ausserhalb 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 so zu sagen 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 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 eine 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 vereinbar 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 trotzt 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 statisch vereinbar, 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 ergibt:


<?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, so genannte Endlos-Schleifen bzw. Endlos-Rekursionen zu programmieren, welche die Performance des jeweiligen Systems äusserst 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 Endlos-Schleife.




 


Unwandeln und Prüfen von Variablen
 






© 2001-2005 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt
© 2005 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de