Hi!
Unter "Initialisierung" verstehe ich die Vorbereitung einer Ausgabe; in OOP erfolgt das im Konstruktor, der das Objekt, mit dem die Ausgabe erfolgen soll (z.B. HTML oder eine Ajax-Response) mit Daten betankt (initialisiert). Mit einer strikten Vorgehensweise wird dieses Objekt alle Daten enthalten, die für die Ausgabe gebraucht werden, so dass z.b. Summen oder Maximalwerte nicht etwa während der Darstellung ermittelt werden müssen.
Die Vorbereitung einer Ausgabe kann ja erst einer der Verarbeitungsschritte sein. Eine Initialisierung findet üblicherweise vor der Verarbeitung statt. Das Ausgabe-Vorbereiten würde ich in einer Methode namens render() unterbringen. Das ist keine Aufgabe für einen Konstruktor.
Wenn du ein Container-Objekt hast, das die Daten der abgefragten Datensätze und noch ein paar Zusatzdaten (Summen, Maximalwerte) aufnimmt, so wird das im Laufe der Verarbeitung mit Inhalt gefüllt und nicht schon im Konstruktor. Der bekommt nur die Aufgabe, das leere Array für die Datensätze anzulegen und die Zusatzdatenspeicher zu initialisieren, falls beides nicht bereits beim Anlegen der Eigenschaften geschehen kann.
Das Befüllen des Arrays und die Ermittlung der Zusatzdaten erfolgt in einer anderweitig aufgerufenen Methode und ist ebenfalls kein Initialisierungsschritt.
Ich habe den Eindruck, das deine Auffassung von Initialisierung eine andere als die mir bekannte ist.
Es ist jedoch so, dass auszugebende Daten auch aus anderen Quellen stammen können und das Ergebnis einer SQL-Abfrage ist i.d.R. auch nur eine "Menge" mit namenlosen Werten ('Heinz', '33', '1.80', '92'), die für eine Ausgabe noch etwas erfahren müssen, z.B. {Vorname => 'Heinz', Alter => '33 Jahre', Länge => '1.80 Meter', Gewicht => '92 Kilogramm'}; hier ist OOP ein guter Ansatz.
Zumindest PHP kennt Fetch-Funktionen, die die Namen der Felder mitliefern. Wenn du für jeden Datensatz ein Datenobjekt nehmen willst, so sind dessen Eigenschaften-Namen bereits seit dem Anlegen der Klasse bekannt (wenn man nicht gerade auf dynamisches Anlegen von Eigenschaften setzt). Die intern verwendeten Namen sind also bereits bekannt und die Anzeigenamen für die Ausgabe stehen zum Beispiel bereits im Template. Das bekommt man herkömmlich auch bestens geregelt, da ist die OOP auch kein besserer Ansatz.
Lo!