Über die Beziehung zwischen Objektreferenzen und Destruktoren in PHP

黄舟
Freigeben: 2023-03-12 10:52:02
Original
1246 Leute haben es durchsucht

In PHP gehören Konstruktor und Destruktor beide zu magischen Methoden. Wenn sich der Konstruktor beispielsweise in einer bestimmten Klasse befindet, wenn dies der Fall ist Klasse Es wird automatisch aufgerufen, wenn es instanziiert wird, und der Destruktor wird automatisch aufgerufen, wenn das Objekt dieser Klasse zerstört wird. Standardmäßig wird es automatisch aufgerufen, wenn die Programmausführung endet.

Wenn wir einen Verweis auf das Objekt erstellen, ändert sich auch der Destruktoraufruf. Wenn nur ein Objekt instanziiert wird, z. B. $obj, dann so lange da $obj = null; bedeutet diese Anweisung, dass das Objekt $obj zu diesem Zeitpunkt zerstört wird, andere Objekte dieser Klasse jedoch nicht betroffen sind.

Wenn wir $obj1 = &$obj; verwenden, um auf die Zuweisungsoperation zu verweisen, generiert diese Operation keine neue Referenz auf das Objekt -genannt zwei Objekte, die tatsächlich denselben Speicher-Heap-Speicherplatz verwenden. Wenn eines von $ obj oder $ obj1 zerstört wird, verschwindet gleichzeitig das andere.

Wenn Sie die Operation $obj1 = $obj; verwenden, handelt es sich um eine direkte Zuweisungsoperation, die einen neuen Verweis auf ein Objekt generiert, wenn entweder $obj oder $obj1 zerstört wird. Der Destruktor wird nicht ausgeführt und das andere Objekt kann weiterhin normal verwendet werden. Der Destruktor wird erst ausgeführt, wenn beide Objekte zerstört sind. Dies zeigt, dass die beiden Objekte eine einheitliche Beziehung haben, sondern eine Referenzbeziehung erstellt kein neues Objekt, das sich nicht gegenseitig stört, sondern verweist auf ein Objekt. Wenn sich die Mitglieder eines Objekts ändern, ändern sich die Mitglieder des anderen Objekts entsprechend und stehen in Beziehung zueinander, sodass eine direkte Zuweisung mit = erfolgt = Eine Situation zwischen &-Operation und Klonoperation.

Wenn Sie eine Klonoperation ausführen, ist $obj1 = clone $obj; bei dieser Operation sind $obj1 und $obj zwei Objekte, die keine Auswirkungen haben Ein anderes Mitglied. Im Klon sind alle Mitglieds--Attribute -Werte von $obj1 genau die gleichen wie $obj. Beim Kopieren können Sie auch die magische Methode clone() in die Klasse schreiben, um einigen Attributen von $obj1 einen neuen Wert zuzuweisen oder unerwünschte Werte zu blockieren. Hier ist ein einfaches Beispiel der Implementierungsmethode.

class Player{
    public $name;
    function destruct(){
        echo "Destroying ".$this->name."<br />";
    }
    //设置魔术方法,赋值时会自动调用这里的属性值,作用是初始化值,或屏蔽不想要的值
    function clone(){
        $this->name="gbcs";
    }
}
$james=new Player();
$james2=clone $james;
echo $james2->name.&#39;<br />&#39;;
$james->name="james";
$james2->name="james2";
echo $james->name.&#39;<br />&#39;;
$james=null;
echo $james2->name.&#39;<br />&#39;;
Nach dem Login kopieren

Die Ausführungsergebnisse sind wie folgt:

Anhand der Ausführungsergebnisse ist deutlich zu erkennen, dass clone zwei voneinander unabhängige Objekte generiert und auch die magische Methode clone() aufgerufen wird. Dies ist auch aus der Ausführungssequenz des Destruktors ersichtlich Die beiden Objekte werden separat zerstört und die Bedeutung der Zuweisung ist unterschiedlich.

Das obige ist der detaillierte Inhalt vonÜber die Beziehung zwischen Objektreferenzen und Destruktoren in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage