Michael Wölk: Globale Variablen

Hallo,

ich hab mich grad mal mit Funktionen beschäftigt und festgestellt das funktionen ,solange ich keine referenzen benutze, einen ganz eigenen puffer/speicher haben. sie kennen keine vorhergehende variablen und nur die die man innerhalb der funktion anlegt.

aber es gibt doch globale variabeln. wie lege ich diese an?

global $var = 'test'; ging net...

MfG
Michael Wölk

  1. Hi,

    ich hab mich grad mal mit Funktionen beschäftigt und festgestellt das funktionen ,solange ich keine referenzen benutze, einen ganz eigenen puffer/speicher haben.

    dieser Puffer/Speicher nennt sich Scope. Er ist _sinnvoll_. Wenn Du Werte aus dem einem in einem anderen Scope verwenden möchtest, dann übergib sie entsprechend.

    aber es gibt doch globale variabeln. wie lege ich diese an?

    Mit _größter Vorsicht_. Sowas ist im Grunde programmtechnische Willkür und sollte tunlichst vermieden werden.

    global $var = 'test'; ging net...

    Versuch doch mal die "Deklaration" _ohne_ Initialisierung.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Hi,

    aber es gibt doch globale variabeln. wie lege ich diese an?

    davon abgesehen, dass man globale Variablen aus Kompatibilitäts- und Sicherheitsgründen unterlassen sollte, holst Du diese einfach in die Funktion herein.

    function bla(){
       global $test1, $test2;
    }

    $test1 und $test2 sollten auf dieser Seite verfügbar sein.

    Besser ist aber auf jeden Fall:

    function bla($test1, $test2){

    }

    ciao
    romy

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
    Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
    Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
    1. Hallo

      function bla(){
         global $test1, $test2;
      }

      $test1 und $test2 sollten auf dieser Seite verfügbar sein.

      Besser ist aber auf jeden Fall:

      function bla($test1, $test2){

      }

      Ich übergebe die in der Funktion benötigten Variablen
      nach der letzteren Variante, oft sehe ich in Tutorials
      oder auch Sktripten, deren Quellcode ich "studiere",
      das die Variablen per global in die Funtionen übergeben
      werden. Scheinbar ist das standart[tm].
      Was ist der Vorteil der unteren Variante?

      Tschö, Auge

      1. Hi,

        Was ist der Vorteil der unteren Variante?

        wenn Du die Variable global übergibst, arbeitest Du innerhalb der Funktion auch direkt mit dieser. D.h. machst Du Veränderungen werden sie wirksam, meist ist dies auch erwünscht, allerdings hat es manchmal unerwünschte Nebeneffekte.

        Wenn Du die Variablen im Funktionskopf übergibst arbeitest Du mit einer Art "Kopie" (ausser Du übergibst einen Zeiger -> geht das überhaupt in PHP?)
        Du veränderst also nicht die Variable an sich.

        Meist sind Funktionen allgemeingültig, d.h. sie werden für verschiedenste Anwendungen benötigt, wenn da jetzt eine Variable auch so heisst, wie die die verändert wird gibt es Bandsalat ;)
        Falls die Funktion nur eine Auslagerung des Quellcodes ist, aslo absolut spezifisch, würde mir jetzt kein Nachteil der globalen Übergabe einfallen (ausser, dass es nichtglobal sauberer ist)

        Ich hoffe es wird ein wenig klarer ;)

        ciao
        romy

        --
        DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
        sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
        Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
        Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
        1. Hallo

          Falls die Funktion nur eine Auslagerung des Quellcodes ist, aslo absolut spezifisch, würde mir jetzt kein Nachteil der globalen Übergabe einfallen (ausser, dass es nichtglobal sauberer ist)

          So benutze ich's, Warum immer wieder "Datei öffnen, schreiben, schließen",
          wenn ich das mit einer Funktion "recyceln" kann.

          Ich hoffe es wird ein wenig klarer ;)

          Jaaa, war sehr aufschlußreich und viel mehr als ein "wenig" klarer. Danke!

          Tschö, Auge

      2. Hi,

        das die Variablen per global in die Funtionen übergeben
        werden. Scheinbar ist das standart[tm].
        Was ist der Vorteil der unteren Variante?

        ich persönlich habe nichts dagegen einzuwenden, solche Variablen global zu handhaben, die a) erkennbar globalen Charakter haben (z.B. $_POST, $_SERVER), sowie entweder b1) readonly oder (das aber auch nur bedingt) b2) in ihren Zugriffen hübsch gekapselt sind. Im Fall von b2 spricht man allerdings eher von Klassen :-)

        Chea "Bzw. deren Instanzen." tah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  3. Hallo Michael,

    eine global Var wird automatisch angelegt, wenn eine Var ausserhalb einer Funktion definiert wurde. Innherhalb einer Funktion ist das etwas umständlicher aber auch möglich: $GLOBALS["var"] = "Wert"

    Gruß,
    Danny