Patrick: OO Interaktion von Objekten?

Beitrag lesen

Guten "Morgen",

ich bin objektorientiertem Programmieren nicht ganz fremd - aber es war alles Learning By Doing - eine Zeitlang mal etwas Java. Derzeit bin ich damit beschäftigt, ein PHP-Webprojekt auf OO umzustellen. Der berüchtigte Spaghetti-Code wurde mir auf Dauer zu unübersichtlich und ich möchte die Einbindung weiterer Personen in Teilbereiche des Projektes einbeziehen. Soviel zum Hintergrund.

Ich bin also mit den fundamentalen Begriffen von OO vertraut, sie werden ja auch in jedem Tutorial von Beginn bis zum Ende durchgekaut. Allerdings beschäftigen die sich meistens mit einzelnen Objekten. Die Frage, wie man die Interaktion von Objekten sinnvoll programmiert, konnte ich bisher nicht beantworten.

Das heisst, ich habe nun sagen wir ein Objekt, das die HTML Seitenelemente ausgibt, Header, Footer etc...  Ein Objekt, das den Seiten-"Inhalt" per Interaktion mit Formulardaten und Datenbank aufbereitet und an das erstgenannte Objekt übergibt. Weiterhin ein Objekt zur Durchführung von Datenbank-Abfragen, eines zur Bereitstellung der Text-Strings in der jeweils gewählten Sprache.. Und und und.

Im Moment erstelle ich in der Hauptseite des Scripts (sagen wir index.php) jeweils eine Instanz jedes Objektes und gebe diese Objekte als Parameter an die __construct Methode weiter (damit zum Beispiel ein Objekt der Klasse "Inhalt" mit dem Datenbank Objekt interagieren kann). Ich bin mir aber nicht sicher, ob diese Vorgehensweise sinnvoll und guter Programmierstil ist? Insbesondere ist es mühsam, wenn ein Objekt (vielmehr, eine Klasse) später Zugriff zu einem weiteren Objekt bekommen soll, muss ich das bei jeder Instantiierung im gesamten Projekt manuell anpassen (sprich, die Paramter bei der Verwendung von new ...() um ein neues Objekt ergänzen.)

Eine Alternative wäre, die benötigten Objekte in den Klassen per 'global' sichtbar zu machen. Aber auch das erscheint mit irgendwie suspekt...

Hoffe, mit soviel Texte meine Frage/Verwirrung deutlich gemacht zu haben - vielleicht habt ihr ja einen Denkanstoss für mich.

Noch etwas: In dem oben beschriebenen Setup nutze ich von jeder Klasse nur eine Instanz. Warum also überhaupt instantiieren und nicht gleich alle Methoden static aufrufen? Ich weiss, dass "man das nicht macht". Warum nicht?

Gruss,
Patrick