PHP mehrere Objekte erzeugen

baserider

Well-known member
ID: 174417
L
10 März 2007
682
23
Hi,

für Produkte habe ich eine kleine Klasse, und wenn ich Daten zum Produkt haben will dann so:

$p = new Produkt(5) // ID: 5
$p->getName() // gibt mir den Namen aus

Jetzt möchte ich z.B. alle Produktnamen mit der ID 1-10 auflisten. Gibt es dafür einen Befehl? Mit dem obigen Befehl bekomme ich ja nur eine Ausgabe. Wäre es ok, wenn man über eine Schleife die Objekte erzeugt?
 
hmm... ja ich dachte es gibt vielleicht ne andere Lösung, wenn ich nicht nur ein Objekt sonderen mehrere haben will :)
 
Naja, wenn du mehrere Objekte haben willst, musst du eben auch mehrere Objekte instanziieren. Logisch.
 
ja da haste recht.
Ich hab mir eben mal so ne active record klass angesehen und dort gibts ja z.B. findAll() und man bekommt auch mehrere objekte zurück. Dann wird das wohl intern auch so über ne schleife laufen.
 
du kannst doch auch deine funktion in der Klasse so veraendern:

__construct($start, $end=0) {
if($end!=0) {
query(select blablabla Where id BETWEEN $start AND $end
} else {
query(select blablabla Where id = $start
}

also so wuerde ich es machen^^ und dann halt beim ersten query die werte in ein array speichern und die id als key verwenden und das kannst du ja dann immer wieder ausgeben...

Ich habs jetzt nicht ganz ausfuehrlich erklaert, aber sollte dir ein Gedankenstoss geben ;) solltest du das nicht verstehen frag nochmal und ich schreibe es genauer

gruss
Xindo
 
Das wäre aber wohl ein "klein" "wenig" gegen das OO-Prinzip ;) Ein Objekt ist selbstständig und wird wohl kaum in seinem Konstruktor die Daten von zig weiteren Objekten anfordern.

Wenn, dann könnte man ne statische Methode machen, die (und da wären wir auch wieder bei Schleife von Instanziierungen) sowas der Art macht
PHP:
public static function loadProducts($begin, $end)
{
  $res = DB::getInstance()->queryf("SELECT .... $begin ... $end;");
  $return_array = array();
  while($row = $res->nextRow())
      $return_array[] = Product::constructFromData($row['data']);

  return $return_array;
}