Maison >développement back-end >tutoriel php >Analyse du destructeur __destruct et du mécanisme de garbage collection en PHP
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 '析构函数现在执行了 <br />'; echo '这里一般用来设置、关闭数据库、关闭文件等收尾工作'; }}$p = new Person();for($i = 0; $i < 5; $i++){ echo "$i <br />";} ?>
Résultat de l'exécution du programme :
0 1 2 3 4 析构函数现在执行了 这里一般用来设置、关闭数据库、关闭文件等收尾工作
Lorsque l'objet n'est pas pointé, l'objet est détruit.
<?php class Person { public function destruct(){ echo '析构函数现在执行了 <br />'; } } $p = new Person(); $p = null; // 析构函数在这里执行了 $p = "abc"; // 一样的效果 for($i = 0; $i < 5; $i++){ echo "$i <br />"; } ?>
Résultat de l'exécution du programme : 析构函数现在执行了
0
1
2
3
4
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 '析构函数现在执行了 <br />';
}
}
$p = new Person();
$p1 = $p;
unset($p);
echo '现在把 $p 被销毁了,对象是否也被销毁了呢? <br />';
for($i = 0; $i < 5; $i++){
echo "$i <br />";
}
echo '现在再把 $p1 也销毁掉,即已经没有指向对象的变量了<br />';
unset($p1); // 现在没有指向对象的变量了,析构函数在这里执行了
?>
Résultat de l'exécution du programme :
现在把 $p 被销毁了,对象是否也被销毁了呢? 0 1 2 3 4 现在再把 $p1 也销毁掉,即已经没有指向对象的变量了 析构函数现在执行了
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!