Heim >Backend-Entwicklung >PHP-Tutorial >Analyse des Destruktors __destruct und des Garbage-Collection-Mechanismus in PHP

Analyse des Destruktors __destruct und des Garbage-Collection-Mechanismus in PHP

黄舟
黄舟Original
2017-07-02 10:24:272474Durchsuche

Destruktor
Wird ausgeführt, wenn ein Objekt zu Müll wird oder wenn das Objekt explizit zerstört wird.
Der in PHP5 bereitgestellte Destruktor ist „destruct“, der der Konstruktormethodeconstruct entspricht.

Garbage Collection – GC (Garbage Collector)
Wenn in PHP keine Variable auf dieses Objekt verweist, wird das Objekt zu Müll und PHP zerstört es im Speicher.
Dies ist der GC-Müllentsorgungsmechanismus (Garbage Collector) von PHP, der einen Speicherüberlauf verhindern kann.
Wenn ein PHP-Thread endet, wird der gesamte aktuell belegte Speicherplatz zerstört und alle Objekte im aktuellen Programm werden ebenfalls zerstört.

destruct() Destruktor wird ausgeführt, wenn das Müllobjekt recycelt wird.
Der Destruktor wird automatisch vom System aufgerufen und kann auch explizit aufgerufen werden, tun Sie dies jedoch nicht.

Wie im folgenden Programm gezeigt, werden alle Objekte zerstört, bevor das Programm endet. Der Destruktor wurde aufgerufen.

<?php
class Person {
	public function destruct(){
		echo &#39;析构函数现在执行了 <br />&#39;;
		echo &#39;这里一般用来设置、关闭数据库、关闭文件等收尾工作&#39;;
	}}$p = new Person();for($i = 0; $i < 5; $i++){
	echo "$i <br />";}
	?>

Ergebnis der Programmausführung:

0 1 2 3 4 析构函数现在执行了 
这里一般用来设置、关闭数据库、关闭文件等收尾工作

Wenn nicht auf das Objekt gezeigt wird, wird das Objekt zerstört.

<?php
class Person {
	public function destruct(){
		echo &#39;析构函数现在执行了 <br />&#39;;
	}
}

$p = new Person();
$p = null; // 析构函数在这里执行了
$p = "abc"; // 一样的效果
for($i = 0; $i < 5; $i++){
	echo "$i <br />";
}
?>

Ergebnis der Programmausführung:

析构函数现在执行了 
0 
1 
2 
3 
4
Im obigen Beispiel setzen wir $p auf leer oder weisen $p eine Zeichenfolge zu , sodass das Objekt, auf das $p zeigt, zu einem Müllobjekt wird. PHP-Müll zerstört dieses Objekt.

PHP-Unset-Variable
<?php
class Person {
	public function destruct(){
		echo &#39;析构函数现在执行了 <br />&#39;;
	}
}

$p = new Person();
$p1 = $p;

unset($p);
echo &#39;现在把 $p 被销毁了,对象是否也被销毁了呢? <br />&#39;;

for($i = 0; $i < 5; $i++){
	echo "$i <br />";
}

echo &#39;现在再把 $p1 也销毁掉,即已经没有指向对象的变量了<br />&#39;;
unset($p1); // 现在没有指向对象的变量了,析构函数在这里执行了
?>

Ergebnis der Programmausführung:

现在把 $p 被销毁了,对象是否也被销毁了呢?
0 
1 
2 
3 
4 
现在再把 $p1 也销毁掉,即已经没有指向对象的变量了
析构函数现在执行了

Unset zerstört die Variable, die auf das Objekt zeigt, und Nicht dieses Objekt.


Das obige ist der detaillierte Inhalt vonAnalyse des Destruktors __destruct und des Garbage-Collection-Mechanismus in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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