dedlfix: Constructor in einer Methode der Klasse erneut aufrufen?

Beitrag lesen

Tach!

Ist es legitim in der query()-Methode den Constructor mit $this->__construct(); neu auszuführen, falls die Datenbank-Verbindung nicht mehr besteht oder ist das ein schlechter Stil den Constructor in einer Methode der Klasse neu aufzurufen?

Im Prinzip ist das nur schlechter Stil.

Eigentlich ist der Constructor ja eine normale Methode der Klasse. Von der Seite betrachtet dürfte es ja kein Problem sein ihn erneut aufzurufen.

Richtig. Rein technisch sehe ich auch nichts, was dagegen spricht, den Constructor als normale Methode anzusehen. Wenn du den Parent-Constructor aufrufst, findet dabei auch nur ein normaler Methodenaufruf statt. Die Sonderstellung nimmt er nur im Zusammenhang mit dem new-Operator ein, als automatisch aufgerufene Methode nach dem Instantiieren des Objekts als solches.

Auf der anderen Seite ist ein Constructor ja dazu gedacht Werte zu initialisieren, die die Klasse auf jedenfall benötigt. Den Constructor dann in einer Methode der Klasse aufzurufen spricht ja dann gegen die Logik, wofür der Constructor eigentlich gedacht ist.

Eigentlich. Du kannst ja die Aufgaben so trennen, dass der Constructor selbst die nur einmalig benötigten Dinge ausführt und für weitergehende Sachen eigene Methoden aufruft. Diese Methoden können dann auch von anderswo aufgerufen werden, wenn du dir die Gewissensbisse bei Missbrauch des Constructors ersparen möchtest. Zudem ist der Name der Methode dann sprechender als "__construct".

Ich weiß, in meinem Beispiel könnte ich in der query()-Methode auch einfach die connect()-Methode aufrufen und damit erübrigt sich meine Frage aber das soll nur ein Beispiel sein um meine Frage zu verdeutlichen. Es ist mehr eine genrelle Frage bezüglich des Constructors.

In dem speziellen Fall kann es sinnvoll sein, die Verbindung erst herzustellen, wenn sie benötigt wird (lazy connect), also frühestens beim Maskieren (mysql(i)_real_escape_string).

dedlfix.