Heim >Backend-Entwicklung >PHP-Problem >So löschen Sie Variablen in PHP
Die Zerstörung von PHP-Variablen oder -Objekten kann in explizite Zerstörung und implizite Zerstörung unterteilt werden:
1. Explizite Zerstörung, wenn auf das Objekt nicht verwiesen wird zerstört werden, damit wir es löschen oder NULL zuweisen können. 2. Implizite Zerstörung. PHP ist eine Skriptsprache. Wenn die letzte Codezeile ausgeführt wird, muss der gesamte Speicher gelöscht werden freigegeben werden;
Aus den oben genannten zwei Zerstörungsmethoden können wir drei Methoden der Zerstörung zusammenfassen: das ist
1 🎜>2. $varname=null
3. Destruktor __destruct()
Zum Beispiel:
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 死了!Zuerst von Alles in allem müssen wir wissen, dass der Variablenname im Speicherstapel gespeichert ist. Er zeigt auf die Adresse des spezifischen Speichers im Heap. Daher können wir den Speicher im Heap finden Fazit:
<?php $a = 1; $b = &$a; unset($a); var_dump($a); var_dump($b);Das Ergebnis ist:
Notice: Undefined variable: a in E:\amp\apache\htdocs\index.php on line 5 NULL int(1)unset() zerstört also nicht wirklich den Speicherwert in der Variablen, sondern schneidet nur die Beziehung zwischen den ab Variable und der Speicher, und der Variablenname wird ebenfalls entfernt, aber der Speicher wird nicht freigegeben, solange er noch in PHP referenziert wird, der Wert eines Objekts wird standardmäßig als Referenz übergeben, was auch erklärt, dass in der Menschliche Klasse, $a ist nicht gesetzt( ), aber $b =$c = $d hat immer noch Wert.
2. $varname=null, der Variablenname existiert noch, aber der Speicherwert wird gelöscht. Was ist also mit der Pass-by-Reference? Beispiel:
<?php $a = 1; $b = &$a; $a=null; var_dump($a); var_dump($b);
输出的结果是: NULL NULLAlso $varname=null, obwohl der Variablenname und der Speicherzeiger noch vorhanden sind, wird der Wert im Speicher vollständig gelöscht.
3. Wie aus dem obigen Beispiel ersichtlich ist, wird der Destruktor __destruct() erst gestartet, wenn PHP den letzten Code ausführt, aber dieses Verständnis ist zum Beispiel nicht genau genug <?php
class Human{
public $name = '开始';
public function __destruct(){
echo '结束';
}}
$a = new Human;
echo $a->name;
unset($a); //销毁函数
$a = new Human;
echo '***********************';
输出的结果是:
开始结束***************************结束
rrreeDie obigen Ergebnisse zeigen, dass der Code nicht startet, wenn die letzte Zeile ausgeführt wird, sondern automatisch ausgeführt wird, wenn das Objekt zerstört wird. Der Grund, warum der Destruktor __destruct() am Ende immer noch ausgeführt wird, wenn die Funktion human() auch über unset() verfügt, liegt darin, dass der Speicher des Objekts nicht gelöscht wird und das Objekt bei der Übergabe als Referenz nicht vollständig zerstört wird.
Empfohlenes Tutorial:
PHP-Video-TutorialDas obige ist der detaillierte Inhalt vonSo löschen Sie Variablen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!