Steffen: Array aus Objekten

Hi,

aus den Ergebnissen einer Dantebankabfrage erstelle ich pro Datansatz ein Objekt einer selbst definierten Klasse und füge diese in eine array ein:

  
$eineListe= array();  
while($row = $result->fetch_assoc()){  
$foo = new MyClass($row['id'], ...);  
//die instanz '$foo' meiner Klasse wurde erzeugt und die Eigenschaften haben die im Konstruktor zugewiesenen Werte, habe ich mit Testausgaben überprüft  
  
//das Objekt an $eineListe anhängen  
$eineListe[] = $foo;  
}  

1. Mache ich das soweit richtig?
2. Wie kann ich auf die Objekte aus eineListe wieder zugreifen?

  
for($i = 0; $i < count($eineListe); $i++){  
echo "$eineListe[i]->eigenschaft<br>";  
}  

funktioniert schon mal nicht.

MfG
Steffen

  1. Sorry,

    for($i = 0; $i < count($eineListe); $i++){
    echo "$eineListe[i]->eigenschaft<br>";
    }

    ich hatte ein $ bei $i vergessen. Rrrrrrrrrrrr!
    
  2. Hi,

    $eineListe= array();
    while($row = $result->fetch_assoc()){
    $foo = new MyClass($row['id'], ...);
    //die instanz '$foo' meiner Klasse wurde erzeugt und die Eigenschaften haben die im Konstruktor zugewiesenen Werte, habe ich mit Testausgaben überprüft

    //das Objekt an $eineListe anhängen
    $eineListe[] = $foo;
    }

    
    >   
    > 1. Mache ich das soweit richtig?  
      
    Sieht soweit korrekt aus. Falls du sicher bist, dass die Felder deines Resultsets die selben Namen haben wie die Member deiner Klasse, dann kannst du auch  
    ~~~php
      
    $items = array();  
    while ($r = $res->fetch_object('MyClass')) {  
      $items[] = $r;  
    }  
    
    

    schreiben. Hat aber den Nachteil, dass dann deine SQL-Queries eng an deine Klasse gebunden sind. Ich habe dies eine zeitlang so genutzt, dass die abfragenden Methoden statische Methoden der Klasse waren, würde dies aber heute nicht mehr unbedingt so machen.

      
    class MyClass {  
      private $member1;  
      private $member2;  
      
      public static getItems(mysqli $dbh) {  
        $res = $dbh->query("SELECT t.abc member1, t.xyz member2 FROM myTable t");  
        $items = array();  
        while ($r = $res->fetch_object('MyClass')) {  
          $items[] = $r;  
        }  
        return $items;  
      }  
    }  
      
    $myItems = MyClass::getItems($dbh);  
    
    

    Bis die Tage,
    Matti

  3. Hallo,

    $eineListe[] = new MyClass($row['id'], ...);

    foreach($eineListe as $rowNr => $values) {
    echo $rowNr;
    var_dump($values);
    }

    Im Zweifel auch mal mit alternativer Syntax beschäftigen.

    Gruß

    jobo