Moin!
hier mal das Skript, aber am Beispiel von Session und Zeitzone, im Sinne das gleiche Problem.
$time = new Time( $cfg, $session ); // Konfiguration $cfg einlesen, $session gebraucht um lokale Zeit-Zone zu setzen. <-- NOTICE-Meldung, dass es nicht existiert.
$output = new Output( $cfg ); // Template-System starten
$db = new MySQL( $output ); // Datenbank-Start
$db->start();
$session = new Session( $cfg, $db, $output, $time ); // Start der Sitzung
$session->start(); // lokale Zeitzone des Users wird geladen.
$time->configurate(); // $session wird benötigt um lokale Zeit-Zone, Zeitverschiebung zu setzen.
Mal ganz ehrlich: Deine Abhängigkeiten sind doch eher abstrus, das würde ich so nicht bauen wollen.
Nur so als Beispiel: Deine Datenbankanbindung braucht das Template-System? WTF? Datenbank und Templates haben nach meiner Ansicht nichts miteinander zu tun. Datenbanken liefern Daten. Templates konsumieren Daten. Der Controller sorgt dafür, dass die Daten aus der DB kommen und ins Template geschoben werden.
Dasselbe gilt für die Session. Bestenfalls braucht die Session eine Datenbank zum Wegspeichern - das ist aber nicht dieselbe Datenbank, die man sonst noch so braucht, um Daten ins Template zu tun. Und das Template gehört ganz sicher auch nicht in die Session. Allenfalls gehören Daten aus der Session in das Template - das regelt dann der Controller oder irgendeine Komponente, die pauschal immer bei jedem Aufruf läuft - und an dieser Stelle würde man z.B. auch gleich die Rechte checken, mit einer ACL-Komponente.
Insofern besteht deshalb auch keine technische Notwendigkeit, das dein Time-Objekt auf das Session-Objekt zugreifen muss. Damit würdest du dir tatsächlich eine zirkuläre Referenzkette aufbauen - du kämst von Time auf Session, und von dort wieder auf Time.
Zirkuläre Referenzen sind immer ein Zeichen von mangelhafter Architektur. Du solltest das dringend überarbeiten.
- Sven Rautenberg