Analyse du destructeur __destruct et du mécanisme de garbage collection en PHP

黄舟
Libérer: 2023-03-12 10:48:02
original
2396 Les gens l'ont consulté

Destructeur
S'exécute lorsqu'un objet devient un déchet ou lorsque l'objet est explicitement détruit.
Le destructeur fourni en PHP5 est destruct, qui correspond à la méthode constructeurconstruct.

Garbage Collection - GC (Garbage Collector)
En PHP, lorsqu'il n'y a pas de variable pointant vers cet objet, l'objet devient un déchet et PHP le détruira dans la mémoire.
Il s'agit du mécanisme d'élimination des ordures GC (Garbage Collector) de PHP. La collecte des ordures peut empêcher le débordement de mémoire.
Lorsqu'un thread PHP se termine, tout l'espace mémoire actuellement occupé sera détruit, et tous les objets du programme en cours seront également détruits.

Le destructeur destruct() est exécuté lorsque l'objet poubelle est recyclé.
Le destructeur est automatiquement appelé par le système, et peut également être appelé explicitement, mais ne le faites pas.

Comme le montre le programme ci-dessous, tous les objets sont détruits avant la fin du programme. Le destructeur est appelé.

<?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 />";}
	?>
Copier après la connexion

Résultat de l'exécution du programme :

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

Lorsque l'objet n'est pas pointé, l'objet est détruit.

<?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 />";
}
?>
Copier après la connexion

Résultat de l'exécution du programme :

析构函数现在执行了 
0 
1 
2 
3 
4
Copier après la connexion
Dans l'exemple ci-dessus, nous définissons $p sur vide ou attribuons à $p une chaîne , donc l'objet pointé par $p devient un objet poubelle. PHP supprime cet objet.

variable php non définie
<?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); // 现在没有指向对象的变量了,析构函数在这里执行了
?>
Copier après la connexion

Résultat de l'exécution du programme :

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

unset détruit la variable pointant vers l'objet, et Pas cet objet.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal