dedlfix: wie __destruct sinnvoll nutzen?

Beitrag lesen

Tach!

Ist es nicht so, dass der Destruktor 2x Aufgerufen wird?

Kommt drauf an, ob man close() aufruft oder nicht.

IIRC, war es doch bei PHP so, dass der Destruktor an sich auch nur eine 'einfache' Funktion ist und wenn man sie aufruft, das nicht gleichbedeutend damit ist, dass das Objekt zerstört wurde.

Weder konstruiert eine Konstruktor-Funktion ein Objekt noch zerstört es die Destruktor-Funktion. Beide werden nur jeweils wärend eines solchen Prozesses aufgerufen, wenn vorhanden.

Das würde dann bedeuten, dass der Destruktor 2x aufgerufen wird. Einmal durch $obj->close() und einmal wenn wenn der GC durch läuft, was wiederum bedeutet, dass beim Aufruf durch den GC die Resource schon freigegeben wurde.

So ist es. Weiterhin wird das Ressourcen-Handle nicht gegen beispielsweise null oder false ausgetauscht. Es bleibt Ressourcen-Handle. Mit einem einfachen echo sieht man im geöffneten Zustand und nach fclose() immer nur "Resource id #3". Mit vardump hingegen wird aus "resource(3) of type (stream)" nach dem Schließen ein "unknown" aus dem "stream". Wenn man nur das echo anschaut, kann man leicht zu einem falschen Schluss bezüglich des Status der Ressource kommen.

dedlfix.