Maison > Article > développement back-end > Comment supprimer des variables en php
La destruction de variables ou d'objets PHP peut être divisée en destruction explicite et destruction implicite :
1. La destruction explicite, lorsque l'objet n'est pas référencé sera être détruit, afin que nous puissions le supprimer ou lui attribuer NULL
2. Destruction implicite, PHP est un langage de script, lorsque la dernière ligne de code est exécutée, toute la mémoire appliquée doit être détruite. être libéré ;
Parmi les deux méthodes de destruction ci-dessus, nous pouvons résumer trois méthodes de destruction : c'est-à-dire
1. 🎜>2. $varname=null
3. Destructeur __destruct()
Par exemple :
class Human { public $name = '张三'; public $gender = null; public function __destruct() { echo '死了!<br />'; } } $a = new Human(); $b = $c = $d = $a; unset($a); $d=null; echo '<hr />'; var_dump($a); echo '<hr />'; var_dump($b); echo '<hr />'; var_dump($c); echo '<hr />'; var_dump($d); 结果如下: Notice: Undefined variable: a in /Library/WebServer/Documents/test.php on line 42 NULL object(Human)#1 (2) { ["name"]=> string(6) "张三" ["gender"]=> NULL } object(Human)#1 (2) { ["name"]=> string(6) "张三" ["gender"]=> NULL } NULL 死了!Premier de tout, il faut savoir qu'en PHP, le nom de la variable est stocké dans la pile mémoire. Il pointe vers l'adresse de la mémoire spécifique dans le tas. Nous pouvons trouver la mémoire dans le tas grâce au nom de la variable, nous pouvons donc conclure ; Conclusion :
<?php $a = 1; $b = &$a; unset($a); var_dump($a); var_dump($b);
Le résultat est :
Notice: Undefined variable: a in E:\amp\apache\htdocs\index.php on line 5 NULL int(1)Donc, unset() ne détruit pas vraiment la valeur mémoire dans la variable, il coupe simplement la relation entre le variable et la mémoire. , et le nom de la variable est également supprimé, mais la mémoire ne sera pas libérée tant qu'elle est encore référencée ; en PHP, la valeur d'un objet est passée par référence par défaut, ce qui explique aussi cela dans le Classe humaine, $a n'est pas défini( ), mais $b =$c = $d a toujours de la valeur.
2. $varname=null, le nom de la variable existe toujours, mais la valeur mémoire est supprimée. Alors qu’en est-il dans le cas du passage par référence ? Exemple :
<?php $a = 1; $b = &$a; $a=null; var_dump($a); var_dump($b);
输出的结果是: NULL NULLDonc, $varname=null, bien que le nom de la variable et le pointeur mémoire existent toujours, la valeur en mémoire est complètement supprimée.
3. Comme le montre l'exemple ci-dessus, le destructeur __destruct() n'est démarré que lorsque PHP exécute le dernier morceau de code, mais cette compréhension n'est pas assez précise. Par exemple
.<?php class Human{ public $name = '开始'; public function __destruct(){ echo '结束'; }} $a = new Human; echo $a->name; unset($a); //销毁函数 $a = new Human; echo '***********************'; 输出的结果是: 开始结束***************************结束rrreeLes résultats ci-dessus montrent que le code ne démarre pas lorsque la dernière ligne est exécutée, mais est automatiquement exécuté lorsque l'objet est détruit. La raison pour laquelle le destructeur __destruct() est toujours exécuté à la fin lorsque la fonction human() a également unset() est que la mémoire de l'objet n'est pas annulée et que l'objet n'est pas complètement détruit lors du passage par référence.
La conclusion est donc la suivante : s'il n'y a pas de destruction manuelle, une fois l'exécution du code terminée, le système exécutera automatiquement le destructeur __destruct() lorsque la mémoire est libérée. Si l'objet est détruit, il sera exécuté automatiquement.
Tutoriel recommandé : Tutoriel vidéo PHP
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!