Frage

Sollte die „Sichtbarkeit“ für die __destruct() Funktion öffentlich sein oder etwas anderes? Ich versuche, eine Standard doc für meine Fraktion zu schreiben und diese Frage kam.

War es hilfreich?

Lösung

Zusätzlich zu Mark Biek Antwort:

Die __destruct () Funktion muss öffentlich deklariert werden. Andernfalls wird die Funktion nicht auf Skript Shutdown ausgeführt werden:

Warning: Call to protected MyChild1::__destruct() from context '' during shutdown ignored in Unknown on line 0
Warning: Call to private MyChild2::__destruct() from context '' during shutdown ignored in Unknown on line 0

Das kann nicht schädlich sein, sondern unrein.

Aber das Wichtigste daran: Wenn die destructor private deklariert oder geschützt ist, die Laufzeit wird einen fatalen Fehler in dem Moment wirft der Garbage Collector zu freien Objekten versucht:

<?php
class MyParent
{
    private function __destruct()
    {
        echo 'Parent::__destruct';
    }
}

class MyChild extends MyParent
{
    private function __destruct()
    {
        echo 'Child::__destruct';
        parent::__destruct();
    }
}

$myChild = new MyChild();
$myChild = null;
$myChild = new MyChild();

?>

Ausgänge

Fatal error: Call to private MyChild::__destruct() from context '' in D:\www\scratchbook\destruct.php on line 20

(Danke an Mark Biek für das ausgezeichnete Beispiel!)

Andere Tipps

ich denke, es wäre im Fall öffentlich sein müssen, wo eine Unterklasse explizit muss rufen Sie die __ destruct Methode der Elternklasse.

So etwas würde einen Fehler werfen:

<?php
class MyParent
{
    private function __destruct()
    {
        echo 'Parent::__destruct';
    }
}

class MyChild extends MyParent
{
    function __destruct()
    {
        echo 'Child::__destruct';
        parent::__destruct();
    }
}

$myChild = new MyChild();
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top