aitee: global

Hey all,

ich habe einen Beispiel Code in einem Buch gefunden, der total falsch ist ... was mich interessiert ... was genau bedeutet:

global $<variable>;

greetz t

  1. Hallo

    Zitat von http://www.usegroup.de/software/phptutorial/variablen.html

    Variablen gelten grundsätzlich nur für den Bereich,
    in dem sie definiert wurden.
    Wenn eine Variable beispielsweise in der Funktion definiert wurde,
    gilt sie nur für diesen Bereich.

    Um eine Variable zu importieren die z.B. im Hauptprogramm
    definiert wurde, gehen Sie folgendermaßen vor:

    $a=2;
    $b=3;
    Sum();
    echo $b; // 5
    Function Sum () {
        global $a, $b;
        $b = $a + $b;
    }

    LG
    Aqua

    1. öhh ok immer erstmal alles durchlesen, dann antworten.

      also vielen Dank, eure Antworten haben geholfen :)

      Bedeutet aber auch, dass ich den Fehler noch immern icht gefunden habe ... und ich suche nun schon seid 2 Wochen gg ;)

      hf n greetz t

  2. Hello,

    ich habe einen Beispiel Code in einem Buch gefunden, der total falsch ist ... was mich interessiert ... was genau bedeutet:

    global $<variable>;

    Gegenfrage: was bedeuten dei spitzen Klammern hier?

    Sollte das darauf hindeuten, dass für <variable> jeder gültige Variablenname eingesetzt werden darf, dann bedeutet das global, dass diese Variablen im übergeordneten Scope des gesamten Scriptes bekannt gemacht wird und somit auch vom Schlüselwort function nicht verdeckt wird.

    Praktisch heißt das, dass sie vom Parser einfach in einer anderen Tabelle eingetragen wird, als die übrigen Variablen, "normale" Scriptvariablen und gekapselte Funktionsvariablen.

    Grüße

    Tom

    1. Gegenfrage: was bedeuten dei spitzen Klammern hier?

      Sollte das darauf hindeuten, dass für <variable> jeder gültige Variablenname eingesetzt werden darf,

      jouw ;)

      Praktisch heißt das, dass sie vom Parser einfach in einer anderen Tabelle eingetragen wird, als die übrigen Variablen, "normale"

      Hmm ... ok nehmen wir an, ich habe folgendes Gerüst:

      $variable = "<text>";

      function <function_name> ()
      {
        global $variable;
      }

      Das macht dann keinen Sinn, oder?
      Oder bedeutet das in diesem Fall, Suche die Variable global und nehme den Inhalt?

      1. Hello,

        Hmm ... ok nehmen wir an, ich habe folgendes Gerüst:

        $variable = "<text>";

        function <function_name> ()
        {
          global $variable;
        }

        Oder bedeutet das in diesem Fall, Suche die Variable global und nehme den Inhalt?

        Ja, das heißt es.
        Nun probier mal aus, was nach dem Funktionsaufruf mit der Variablen passiert ist, wenn Du sie vorher außerhalb nicht benutzt (deklariert) hast.

        Man kann dafür schön die Funktion

        array get_defined_vars ( void)

        benutzen, um sich mal Klarheit zu verschaffen.

        Und dann kannst Du nochmal direkt im Script eine Variable mit global deklarieren und in der Funktion ebenfalls. Was passiert dann damit?

        Grüße

        Tom

        1. Also ich deklariere ausserhalb meiner Funktionen in der selben Datei meinen DB connect string. Innerhalb jeder Funktion brauche ich diesen natürlich für die Queries. Somit steht innerhalb jeder Funktion:

          global $connect;

          Soweit so gut ... ich probier mal das get_defined_vars ... aber eigentlich sollte darin nicht der Fehler liegen.

          1. Hello,

            generell sollte man überhaupt nicht mit globalen Variablen arbeiten, es sei denn, sie sind _wirklich_ für das gesamte Script relevant. Aber ich dachte, wir hatten das schon?

            Man sollte immer mit
              Parameterübergabe  -> Funktion  -> Rückgabewert
              Parameter-Array    -> Funktion  -> Rückgabewert / Rückgabearray
              Parameterübergabe  -> Funktion  -> Rückgabe-Array
              Adressübergabe    <-> Funktion (-> Rückgabewert)

            arbeiten.

            Dabei halte ich die Variante mit Parameter-Array und Rückgabe-Array für die eleganteste. Das ist nämlich OOP schon sehr nah. Es setzt aber voraus, dass man nicht an die Speichergrenzen stößt.

            Ich denke, dazu gibt es hier (auch von mir) schon viele andere Postings.

            Grüße

            Tom

        2. Also, ich habe mir mal versucht, das alles auszugeben ... erfolglos :/

          Hier mein Script dafür:

          $testcounter = 0;
          while ($testarray = get_defined_vars ())
          {
            echo $testarray[$testcounter];
            $testcounter++;
          }

          Ich kriege immer nen Timeout vom Apache glaub ich ...