Powl: Geltungsbereich Variablen

Hallo,

Ich habe ein Verständnisproblem mit dem Geltungsbereich von Variablen in PHP.

Folgendes Scenario:
Funktion main ruft Funktion sub1 auf.
sub eins berechnet varA und varB und kehrt mit return zu main zurück
main ruft Funktion sub2 auf
sub2 soll mit varA und varB arbeiten und varC bestimmen
sub2 soll varC an main übergeben.

Da stehe ich irgendwie völlig auf dem Schlauch. Mit global funktioniert das irgendwie nicht wie gewünscht.
Muß ich die Variablen in das Array GLOBALS schreiben, um sie global verfügbar zu machen, oder wie kann das gehen?

netten Tag
^da Powl

  1. Hi Powl!

    Funktion main ruft Funktion sub1 auf.
    sub eins berechnet varA und varB und kehrt mit return zu main zurück
    main ruft Funktion sub2 auf
    sub2 soll mit varA und varB arbeiten und varC bestimmen
    sub2 soll varC an main übergeben.

    Mal global, mal lokal. Was denn nun?
    Und was ist die main-Funktion? Wo wird sie aufgerufen? [1]

    Da stehe ich irgendwie völlig auf dem Schlauch. Mit global funktioniert das irgendwie nicht wie gewünscht.

    Was heißt "funktioniert nicht"?

    Muß ich die Variablen in das Array GLOBALS schreiben, um sie global verfügbar zu machen, oder wie kann das gehen?

    Globale Variablen definiert man für gewöhnlich einfach global. =)

    [1] Oder kann man sie wie in C benutzen?

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  2. Hi !

    Folgendes Scenario:
    Funktion main ruft Funktion sub1 auf.
    sub eins berechnet varA und varB und kehrt mit return zu main zurück
    main ruft Funktion sub2 auf
    sub2 soll mit varA und varB arbeiten und varC bestimmen
    sub2 soll varC an main übergeben.

    Da stehe ich irgendwie völlig auf dem Schlauch. Mit global funktioniert das irgendwie nicht wie gewünscht.
    Muß ich die Variablen in das Array GLOBALS schreiben, um sie global verfügbar zu machen, oder wie kann das gehen?

    Tja, wie ruft main die Funktion sub1 auf?

    sub1() mit A,B als globalen Variablen

    oder

    sub1(A,B) ?

    Ist der Aufruf sub1(A,B) ein

    "Call bei value" -> Es wird nur eine Kopie der Variablen übergeben, die Inhalte ändern sich nach Beendigung von sub1 nicht

    oder ein

    "Call bei reference" -> Es wird ein Zeiger auf die Adresse von A und B übergeben und wenn sub1 diese ändert, sind A und B auch innerhalb main() geändert.

    Gruß

    Hans

    1. Hallo,

      "Call bei reference" -> Es wird ein Zeiger auf die Adresse von A und B übergeben und wenn sub1 diese ändert, sind A und B auch innerhalb main() geändert.

      Das scheint mir der zutreffende Fall zu sein.

      Also müßte ich in Funktion main() sub1 wie folgt aufrufen, oder?

      &sub1(varA, varB);

      Werden die Varablen dann automatisch zurückgegeben, oder müßte ich sie über return explizit and die main Funktion übergegeben?

      Noch eine Frage. Kann man innerhalb einer Funktion auch mittels
      global $varNEU;
      eine Variable als globale neu einführen, oder muß sie schon außerhalb von Funktionen angelegt worden sein?

      Netten Tag
      ^da Powl

      1. echo $begrüßung;

        Noch eine Frage. Kann man innerhalb einer Funktion auch mittels
        global $varNEU;
        eine Variable als globale neu einführen, oder muß sie schon außerhalb von Funktionen angelegt worden sein?

        Wenn du das unbedingt so machen möchtest, probier das doch einfach mit einem kleinen Test-Script aus. In der Zeit, in der du die Frage formulierst und auf Antwort wartest, hast du das Ergebnis auch selbst herausgefunden.

        Generell sollten Funktionen eigenständig arbeiten. Aus den übergebenen Parametern erzeugen sie ein Ergebnis. Lesender und schreibender Zugriff auf globale Variablen ist schlechter Stil und trägt nicht gerade zu ihrer Wiederverwendbarkeit bei.

        Wenn du Werte hast, die mehreren Funktionen zur Verfügung stehen sollen, und diese Funktionen und Variablen mehr oder weniger eine Einheit bilden, könntest du über die Verwendung einer Klasse nachdenken.

        echo "$verabschiedung $name";