Auge: global $GLOBALS; ?

Beitrag lesen

Hallo

$foo = 'hund';

function bar(){
    echo $foo; // sollte funktionieren
    $bla = 'katze';
    return true;
}


>   
> funktioniert nicht  
> richtig wäre:  
>   
> ~~~php

$foo = 'hund';  

> function bar(){  
>     global $foo;  
>     echo $foo; // funktioniert  
>     $bla = 'katze';  
>     return true;  
> }

... oder

$foo = 'hund';  
function bar($foo){  
    echo $foo; // funktioniert  
    $bla = 'katze';  
    return $bla;  
}  
$bla = bar($foo);  
echo $bla; // funktioniert nun auch.

... womit auch $bla zur Verfügung stünde. Obwohl das *in diesem Szenario* verwirren könnte, da $foo direkt nichts mit $bla zu tun hat. Typischerweise prüft oder manipuliert man ja in einer Funktion den Eingabewert. Somit bekommt man eine Prüfausgabe (z.B. true, false, Zahlenwert oder ein Array wie bei getimagesize) oder die veränderte Eingabe zurück.

Für deinen Fall solltest du dir überlegen, inwieweit du im globalen Scope arbeitest, wo in allen includeten Skripten alle Variablen zur Verfügung stehen (Achtung: Namenskonflikte möglich), oder was du in welchen Skripten in Funktionen kapselst. Für die Funktionen wäre dann zu überlegen, was als Parameter übergeben werden kann/soll und was per global auch innerhalb der Funktionen zur Verfügung stehen soll. Bei global musst du allerdings alle Variablen einzeln angeben.

Für den Fall, dass Variablen Benutzerdaten enthalten (z.B. Formulareingaben oder Daten angemeldeter Benutzer) bietet sich (je nach Fall) die konsequente Nutzung von $_GET, $_POST, $_COOKIE oder $_SESSION als Speicher für diese Daten an, da diese Arrays von sich aus superglobal sind, also sowohl innerhalb als auch außerhalb von Funktionen zur Verfügung stehen.

Tschö, Auge

--
Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
Terry Pratchett, "Wachen! Wachen!"
Veranstaltungsdatenbank Vdb 0.3