Sven Rautenberg: Objekt global bereitstellen

Beitrag lesen

Moin!

das macht mich echt verrückt...

Ich habe eine Error Klasse; von dieser erstelle ich ein Objekt in $e

Jetzt möchte ich der kompletten Application das Objekt $e bereitstellen, sodass jede Klasse den Error Handler verwedenen kann.

Aber ich möchte halt nicht in jeder Methode, in der der Error Handler benötigt wird, ein global $e; schreiben, gibt es nicht einen besseren Weg?

Globale Variablen sind eine schlechte Idee - auch in OOP. :)

Die Frage ist, warum du auf diese Lösung mit dem globalen Objekt gekommen bist, und welche Alternativen es gibt. Denn es gibt immer Alternativen, es hängt nur davon ab, wie aufwendig die zu realisieren sind, allgemein betrachtet und ausgehend von deinem jetzigen Code.

Deshalb mal zur Beleuchtung: Was macht deine Error-Klasse? Warum muss sie ein globales Objekt sein?

Der Zugriff auf $GLOBALS ist jedenfalls keine wirkliche Alternative zu "global $e", das ist effektiv dasselbe.

Jede Klasse die Fehlerklasse erweitern zu lassen ist auch keine gute Idee, da die Vererbung eventuell ja schon von einer anderen Klasse genutzt wird - und PHP kennt eben keine Mehrfachvererbung.

Das Stichwort Singleton wurde genannt, aber ich halte es ohne genauere Kenntnis des Grundes, warum das Errorobjekt global sein soll, für keine gute Alternative. Wenn sich der Grund der Globalität eliminieren lässt, entfällt auch die Notwendigkeit für ein Singleton, das ist im Endeffekt die bessere Wahl.

Statische Aufrufe der Klassenmethoden wären noch eine Möglichkeit, aber auch das ist nicht ganz so schön, wie es auf den ersten Blick aussieht. Statt der globalen Variable festen Namens, die in allen Klassen einprogrammiert und genutzt werden muss, sind statische Aufrufe einfach nur eine andere Form desselben Problems: Jetzt muss man eben die fest definierten Klassenmethodennamen aufrufen.

Vernünftig wäre eine Lösung, die jedem Objekt, ggf. im Konstruktor, eine Referenz auf das im globalen Namespace angelegte Error-Objekt übergibt.

- Sven Rautenberg