Auge: global /Globale Variable funktioniert nicht wie erhofft

Beitrag lesen

problematische Seite

Hallo

Hallo Auge,

Das ist eine absolute Falschinterpretation... Aha, na schauen wir mal...

von global. Mit global erkläre ich nicht eine Variable aus dem eigenen Geltungsbereich/Scope für global verfügbar, sondern hole sie aus einem Geltungsbereich in einen anderen hinein. Typischerweise in eine Funktion, die ihren eigenen Scope hat und in dem eine nicht übergebene Variable aus dem globalen Raum schlicht nicht existiert.

Dann müsste es ja zumindest innerhalb der Funktion funktionieren, richtig?

Nein, nicht so, wie du es machst. Und das ist deutlich sichtbar.

function tuwas()
{

$a = 123;

global $a;

echo "<h1>xxx $a xxx</h1>";

$GLOBALS['g'] = $a;
}

tuwas();
$out = $GLOBALS['g'];
echo "<h1>Ausgabe: $out $a</h1>";

Tut es aber nicht weder innen noch außen. Bedeutet für mich klar die Variable $a wurde überschrieben mit NULL.

Natürlich wird sie das. Was erwartest du auch anderes?

Du machst in der Funktion eine Variable $a von außerhalb der Funktion global verfügbar, die es beim Aufruf der Funktion außerhalb dieser Funktion schlicht nicht gibt. Vor dem Aufruf der Funktion mit tuwas(); gibt es keine Variablendeklaration für $a. Keine Hände, keine Kekse; kein $a, keine Übernahme mit global.

Nochmal, das Schlüsselwort global ist nicht dazu gedacht, eine im Geltungsbereich der Funktion erstellte Variable global verfügbar zu machen, sondern eine Variable aus einem übergeordneten Geltungsbereich in die Funktion hinein zu holen (und den Wert an die der Variable im übergeordneten Geltungsbereich zu manipulieren). Du überschreibst innerhalb der Funktion einfach nur die lokale Variable $a mit einer nicht existierenden Variable.

Tschö, Auge

[edit]: Satzbau: an die versus der in „… den Wert der Variable im übergeordneten Geltungsbereich …“

--
Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
Hohle Köpfe von Terry Pratchett