Tach!
Genau so ist es: Im Objekt $time befindet sich coreTime, die Zeit als UTC, wie du es sagtest. Diese Zeit $time->coreTime benötigt das Objekt $session um alte Sitzungen zu löschen und eine Session anzulegen, deren Verfallsdauer etc festzulegen.
Das kann alles in UTC oder der Serverzeit passieren, dazu brauchst du keine Zeitzoneninformation. Vermutlich brauchst du gar keine Zeitzoneinformation in deiner Time-Klasse. Ich würde intern nur die UTC festhalten und toLocalTime($zone) implementieren sowie einen Konstruktor, der die Zeit in UTC oder optional lokal mit Zeitzoneninformation entgegennimmt. Die Zeitzone braucht der Konstruktor nur zum Umrechnen und kann sie dann vergessen. Und selbst wenn die Time-Klasse sich die Zeitzone aus irgendeinem Grunde merken können soll, so braucht sie dazu keine Session sondern nur diese eine Information zur Zeitzone.
Es geht mir jetzt darum eine einheitliche Methode zu finden, Daten eines Objektes in ein anderes Objekt zu inkludieren.
Aufgrund von individuellen Anforderungen ist das ein recht müßiger Versuch, sich das Leben zu vereinfachen. Am Ende wirst du eher unflexibel und treibst vielleicht unnötigen Mehraufwand, nur um deine Einheitlichkeits-Policy zu gewährleisten. Du musst nicht alles objektorientiert machen, skalare Werte sind auch in der OOP nicht verpönt. Also überleg dir genau, was du brauchst und versuch so wenig wie möglich Abhängigkeiten zu schaffen. Reicht ein skalarer Wert, dann übergib diesen statt eines kompletten Objekts, von dem du nur eine Eigenschaft nutzt.
Entweder komplette Verbindung mit Instanzen also $time als Instanz von $session: $session->time oder komplette Trennung der Klassen und inkludieren aller benötigten Abhängigkeiten in Funktionen, in denen sie gebraucht werden.
Sowohl als auch, je nachdem, was für den konkreten Fall sinnvoll ist.
dedlfix.