Sven Rautenberg: wie __destruct sinnvoll nutzen?

Beitrag lesen

Moin!

ich habe mich sehr lange das selbe gefragt.
Nachdem ich aber einige Zeit lang eine Anwendung mit ca. 2000 Usern pro Tag hatte, wurde mir der Sinn leider schmerzlicher bewusst.

PHP räumt zwar in der Tat selber auf, braucht aber grade in Verbindung mit Datenbanken häufig etwas zu lange. Dadurch kann es dazu kommen, dass zuviele Verbindungen offen sind und eventuelle LOCK befehle den rest aufhalten könnten.

Mit der Methode kannst du dann explizit immer sagen, dass die Verbindung beendet werden soll.

Wenn das deine Lösung war, war's keine gute Lösung. Destruktoren werden ja nur implizit aufgerufen, und irgendwann nach dem Löschen der letzten Variablen, die auf das Objekt zeigt.

Wenn du ein Connection-Problem mit der Datenbank hast, würde ich mich fragen, wieviele Prozesse/Threads/Scriptparallel-Läufe der Webserver erlaubt. So viele Connections muss die Datenbank abkönnen.

Wenn's hingegen ein Problem mit dem Locking ist: Ja, Locks sollte man freigeben, wenn man sie nicht mehr braucht...

Für Logging müsste das ganze übrigens auch funktionieren, da man so z.b. noch einen finalen "bin durch gelaufen" Eintrag hinterlassen könnte! Die Dateistreams werden ja auch erst danach geschlossen und nicht schon davor!

Ich würde mich persönlich nicht drauf verlassen, dass man im Destruktor einer Klasse noch was loggen könnte. Da ich aber derzeit keinen einzigen Destruktor in meiner Codebasis habe, weil PHP alles korrekt selbst wegräumt, ist das ein unbedeutender Effekt.

Einzig die Ausgabe funktioniert nicht mehr. Also Echo usw. wird nie erfolg haben.

Das hängt eindeutig davon ab, wann ein Destruktor getriggert wird. Am Scriptende sicherlich nicht.

- Sven Rautenberg