Rolf B: PHP-Klassen in Framework global verfügbar machen

Beitrag lesen

Hallo Matti,

du hast natürlich grundsätzlich recht. Ein Singleton, der tatsächlich stateful ist und die Wiederholbarkeit von Tests sabotiert, ist Käse.

Deswegen arbeite ich in solchen Situationen auch gerne mit einem Context-Objekt, wo alle "globalen" Dinge drin stecken und der an alle Objekte durchgereicht wird, die im Verlauf der Requestverarbeitung entstehen.

Für Tests baut man dann einen Mock-Context auf.

Aber - wer mit DI arbeitet, hat auch einen DI-Container. Eine korrekte Implementierung eines Singleton in einer DI-Welt setzt voraus, dass dieser Singleton ebenfalls im Container gehostet wird, und nicht in einer statischen Variablen einer Klasse. Damit das funktioniert und testbar bleibt, muss man dann natürlich den DI Container überallhin durchschleifen und darf ihn nicht als globalen State missbrauchen. Aber das lässt sich bei einem ordentlichen DI Framework ja deklarativ erledigen.

Keine Ahnung, was PHP da im Angebot hat, bislang habe ich keine professionellen PHP Projekte gemacht. Laravel scheint da ja ein magisches Teil zu enthalten, muss ich mir vielleicht mal anschauen…

Rolf

--
sumpsi - posui - obstruxi