Mal wieder Objekte in einem Array

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

  • Mal wieder Objekte in einem Array

    Hallo,

    irgenwas mache ich falsch... hier ein Code-Schnippsel indem das Objekt ins Array geschoben wird:

    Code:
     while($ant=mysql_fetch_assoc($result)){
            $varListe_ID = $ant[listen_id];
            $varDEU = $ant[DEU]; 
            $objAntrag = &new Antrag($varDEU, $varListe_ID);
            array_push($con_Antraege, $objAntrag );
      }
    Durchlaufe ich das Array habe ich immer die gleiche Referenz... sprich alle Objekte im Array sind die gleichen oder sogar die selben =)

    Hilfffeeeee... ich will ins wochenende... aber nicht mit so einer Baustelle.
    Zuletzt geändert von Ueps; 18.03.2005, 17:12.

  • #2
    arbeitet die klasse richtig?
    wird in der while() immer das erwartete Ergebnis ausgegeben?
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Jopp...

      vor dem array_push() .. hat $varDEU immer den erwarteten Wert, nur halt im Array wird egal unter welchem Index immer das gleiche ausgegeben.

      Mal ein kurzgefasstes Beispiel der Ausgabe:

      Code:
      foreach ($bspArray as $obj){
        echo $obj->getVar()."<br>";
      }
      Ausgabe:

      1
      1
      1
      1

      Obwohl jedes Objekt ein anderen Wert enthalten sollte...

      Zuletzt geändert von Ueps; 18.03.2005, 17:24.

      Kommentar


      • #4
        Re: Mal wieder Objekte in einem Array

        Original geschrieben von Ueps
        PHP-Code:
        $objAntrag = &new Antrag($varDEU$varListe_ID); 
        warum arbeitest du hier mit einer referenz ...?


        so wie ich das sehe, speicherst du dir mit $objAntrag nur den zeiger auf diese referenz ins array.
        im nächsten durchlauf wird $objAntrag wieder eine neue referenz zugewiesen.

        damit wird aber der "zeiger", der im ersten arraydurchlauf schon drin steht, "verbogen" - eben auf das neue objekt.

        usw. usf. - am ende hast du x-mal den zeiger $objAntrag ins array gespeichert - der aber nur auf das zuletzt erzeugte objekt verweist.
        Zuletzt geändert von wahsaga; 18.03.2005, 18:50.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          damit keine weitere klasse in kopie angelegt wird .... ich mache das übrigens auch, genau wie tbt. ;-)
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Original geschrieben von Abraxax
            damit keine weitere klasse in kopie angelegt wird .... ich mache das übrigens auch, genau wie tbt. ;-)
            siehe meinen edit - er speichert m.E. nicht das ins array, was er dort haben möchte.

            ich würde mal aus
            PHP-Code:
            $objAntrag = &new Antrag($varDEU$varListe_ID);
            array_push($con_Antraege$objAntrag ); 
            das folgende machen:
            PHP-Code:
            array_push($con_Antraege, &new Antrag($varDEU$varListe_ID)); 
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              siehe meinen edit
              habs gesehen und stimme dir nun zu.... *g*

              deine lösung ist damit auch genemigt, da richtig.

              das er seine daten überschreibt kam mir auch schon in den sinn. war mir aber nicht 100% sicher.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Hmm bin im "wohlverdienten" feierabend... oder halbwegs verdienten =)


                zum Vorschlag:


                Code:
                array_push($con_Antraege, &new Antrag($varDEU, $varListe_ID));
                ich weiß nicht genau, aber ich glaube das habe ich auch schon probiert... und das ergab glaube ich n parser error... dafür aber keine Gewähr, da ich heute schon ne Menge ausprobiert habe.
                Werde Montag nochmal probieren, ansonsten lege ich das erstmal auf eis und mach woanders weiter =)

                Ich meld mich... falls euch noch was einfällt her damit ansonsten DANKE schonmal.

                Edit:

                PS: Jetzt wo ich es sehe macht ist die zuweisung obj = new blaa in dem Fell wirklich n fehler. Oh maaan... wenn das klappt ... scheibenkleister... wie ich solch Ätschibätschfehler hasse...
                Zuletzt geändert von Ueps; 18.03.2005, 20:25.

                Kommentar


                • #9
                  So ich weiß es ist noch nicht Montag aber es kirbbelt in den Fingern.
                  Habe es mal an einem anderen Hobby-Projekt probiert.
                  Code wie folgt:

                  Code:
                    while($b=mysql_fetch_assoc($result)){
                          array_push($array_user,&new User($b[uid],$b[cid],$b[nick],$b [role],$b[pwd]));
                    }
                    return $array_user;
                  Ergebnis:

                  Parse error: parse error, unexpected T_NEW, expecting T_VARIABLE or '$' in C:\xampp\htdocs\gnb\inc\class_fabrik.inc.php on line 27

                  Mache ich davur ne Zuweisung auf eine Variable

                  Code:
                    while($b=mysql_fetch_assoc($result)){
                          array_push($array_user,$obj = &new User($b[uid],$b[cid],$b[nick],$b [role],$b[pwd]));
                    }
                    return $array_user;
                  habe ich das Problem das er wieder ne Kopie ablegt...

                  Kommentar


                  • #10
                    Original geschrieben von Ueps
                    PHP-Code:
                    array_push($array_user,&new User($b[uid],$b[cid],$b[nick],$b [role],$b[pwd])); 
                    Ergebnis:
                    Parse error: parse error, unexpected T_NEW, expecting T_VARIABLE or '$'
                    kann eine zusätzliche klammerung des ausdrucks hier vielleicht helfen?
                    PHP-Code:
                    array_push($array_user, (&new User($b[uid],$b[cid],$b[nick],$b [role],$b[pwd]))); 

                    alternativ: hast du schon mal versucht, auf array_push() gänzlich zu verzichten, und nur
                    PHP-Code:
                    $array_user[] = &new User($b[uid],$b[cid],$b[nick],$b [role],$b[pwd]); 
                    zum anlegen des neuen arrayeintrages zu verwenden?
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Die "Klammerung" führt nicht zum erfolg; gleicher Parser Error.

                      allerdings funtktioniert es mit...

                      Code:
                      array[] = $new bla(...);
                      ... so halbwegs =) Leider habe ich immernoch nicht das erwünschte ergebnis, nämlich das ich Referenzen auf verschiede Objekte im Array habe.

                      Kommentar

                      Lädt...
                      X