2010-04-11 12 views

Antwort

10

Es gibt dem Objekt eine Gelegenheit, sich darauf vorzubereiten, getötet zu werden. Dies könnte manuelle Bereinigung, Statuspersistenz usw. bedeuten.

Zum Beispiel möchte ein Modell möglicherweise alle seine aktuellen Eigenschaften in die Datenbank zurückspeichern.

Oder ein Datenbankobjekt selbst möchte möglicherweise den Socket schließen, den es zur Kommunikation mit einem Datenbankserver verwendet.

+1

- Es ist auch für die Reinigung: D – Hanseh

+4

Auch etwas zu beachten, __destruct wird nicht nur mit einem Objekt aufgerufen wird gelöscht, sondern auch wenn ein Objekt außerhalb des Bereichs fällt, sowie wenn das Skript endet – deadkarma

2

Angenommen, ich habe eine Result Klasse, die ein Wrapper ist (Implementierung Iterator, neben anderen Feinheiten) für die mysqli_result Objekt. Wenn ich eines meiner Result Objekte zerstöre, möchte ich sicher sein, die free() Methode auf dem mysqli_result Objekt zu rufen, um den Speicher zurückzuerhalten, den es verwendete. Also mache ich das im Destruktor meiner Result Klasse.

3

So wissen Sie wahrscheinlich, was ein Konstruktor tut. Wenn ein Konstruktor eingerichtet wird, räumt ein Destruktor auf. Hier ist ein Beispiel aus der PHP-Website:

<?php 
class my_class { 
    public $error_reporting = false; 

    function __construct($error_reporting = false) { 
    $this->error_reporting = $error_reporting; 
    } 

    function __destruct() { 
    if($this->error_reporting === true) $this->show_report(); 
    unset($this->error_reporting); 
    } 
?> 

Here's the link mit der PHP-Dokumentation zu diesem Thema.

+0

Warum es muss sogar alles entfernen. Wenn das Objekt zerstört wird, werden die Referenzen ebenfalls zerstört, und wenn es keine Referenz mehr gibt, dann haben Objekte, von denen es abhängt, keine Referenz, so dass die Destruktoren dieser Abhängigkeiten aufgerufen werden. – Hafiz