Globals

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Globals

    Guten Abend,
    ich hab aktuell ein Problem mit dem registrieren von globalen variablen in Funktionen, folgendes Beispiel will einfach nicht klappen
    <?
    function make_ids()
    {
    /*paar sql abfragen, an deren ende eine Array mit ids steht,
    die ids werdem im Array $id zusammengefasst*/
    $id[1]="2432";
    show();
    print "--->".$id[1]."<br>";
    }

    function show()
    {
    global $id;
    print "---->".$id[1]."<br>";
    }
    ?>

    das gibt bei mir nur
    ---->
    --->2432
    aus.
    Es scheint so wie als wäre $id nicht wirklich global, also die werte existieren innerhalb von show gar nicht. Ist das normal oder mach ich was falsch. wenn ich sie mit show($id) übergebe, dann habe ich sie, aber das ist ja nicht Sinn des ganzen.

    alles klar
    mfg Martin
    Evtl. Rechtschreibfehler sind beabsichtigt und dienen der Belustigung des Lesers

  • #2
    Eher guten Morgen ^^

    Also: Bei deiner make ids funktion fehlt doch ganz klar

    [php]show($id);[php]

    Und bei der Funktionsdefinierung ebenfalls. Ganz klar ^^

    EDIT:

    Hm, stimmt nicht ganz...

    Zuletzt geändert von hibatsu; 28.07.2003, 01:14.

    Kommentar


    • #3
      http://de3.php.net/manual/de/languag...bles.scope.php

      Hier ist der Denkfehler:

      PHP-Code:
      function make_ids()
      {
      /*paar sql abfragen, an deren ende eine Array mit ids steht, 
      die ids werdem im Array $id zusammengefasst*/
      $id[1]="2432";
      show();
      print 
      "--->".$id[1]."<br>";

      Hier ist $id nicht global, d.h. die Variable steht außerhalb der Funktion nicht zur Verfügung. Daher kann Sie in show() auch nicht ausgegeben werden.

      2 Möglichkeiten:

      $id in make_ids() auf global setzen
      PHP-Code:
      function make_ids()
      {
      global 
      $id;
      /*paar sql abfragen, an deren ende eine Array mit ids steht, 
      die ids werdem im Array $id zusammengefasst*/
      $id[1]="2432";
      show();
      print 
      "--->".$id[1]."<br>";
      }


      function 
      show()
      {
      global 
      $id;
      print 
      "---->".$id[1]."<br>";

      oder an show mit Parameter übergeben:
      PHP-Code:
      function make_ids()
      {
      /*paar sql abfragen, an deren ende eine Array mit ids steht, 
      die ids werdem im Array $id zusammengefasst*/
      $id[1]="2432";
      show($id);
      print 
      "--->".$id[1]."<br>";
      }


      function 
      show($id)
      {
      print 
      "---->".$id[1]."<br>";

      Konrad

      In a world without walls and fences, who needs Windows and Gates ?
      (Sun Microsystems)

      Kommentar


      • #4
        Variablen innerhalb von "function" kann man außerhalb nicht mehr verwenden, außer du gibst sie zurück.

        PHP-Code:

        $id_array 
        = array();

        function 
        add_id($id) {
        global 
        $id_array;
        $id_array[] = $id;
        return 
        $id_array;
        }

        function 
        echo_all_ids() {
        global 
        $id_array;
        for(
        $i=0$i<count($id_array); $i++) {
        echo 
        "-----> ".$id_array[$i]."<br>";
        }
        }

        $id_array add_id(258);
        $id_array add_id(12574);

        echo_all_ids();

        // müsste ne Ausgabe geben, die so aussieht:
        // ----> 258
        // ----> 12574 
        tata
        moqui

        [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

        Kommentar


        • #5
          Danke

          Ich hab mich für Konrads Variante entschieden, funktioniert prächtig. Hatte schon einige solche Probleme, manchmal hat es geklappt, wenn ich die variable die ich global haben wollte, einfach umbenannt habe, also wenn global $id nicht ging hab ich einfach $id in $test oder so umbenannt, dann ging es manchmal komischerweise. Dachte schon es gäbe da irgendwelche konventionen. Aber so mit schon innerhalb der aufrufenden funktion global setzten geht einwandfrei.

          ich danke recht herzlich
          mfg Martin
          Evtl. Rechtschreibfehler sind beabsichtigt und dienen der Belustigung des Lesers

          Kommentar

          Lädt...
          X