So löschen Sie Variablen in PHP

王林
Freigeben: 2023-02-24 15:42:02
Original
4357 Leute haben es durchsucht

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 &#39;死了!<br />&#39;; 
  } 
} 
$a = new Human(); 
$b = $c = $d = $a;
unset($a);
$d=null;


echo &#39;<hr />&#39;;
var_dump($a);
echo &#39;<hr />&#39;;
var_dump($b);
echo &#39;<hr />&#39;;
var_dump($c);
echo &#39;<hr />&#39;;
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 死了!
Nach dem Login kopieren

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);
Nach dem Login kopieren
Das Ergebnis ist:

Notice: Undefined variable: a in E:\amp\apache\htdocs\index.php on line 5
NULL int(1)
Nach dem Login kopieren

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);
Nach dem Login kopieren
输出的结果是:
NULL NULL
Nach dem Login kopieren

Also $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 = &#39;开始&#39;;        
     public function __destruct(){                
     echo &#39;结束&#39;;        
     }}
     $a = new Human;
     echo $a->name;
     unset($a);   //销毁函数 
     $a = new Human; 
     echo &#39;***********************&#39;;

输出的结果是:

开始结束***************************结束
Nach dem Login kopieren
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.

Die Schlussfolgerung lautet also: Wenn keine manuelle Zerstörung erfolgt, wird der Destruktor __destruct() automatisch ausgeführt, wenn das System den Speicher nach Abschluss der Codeausführung automatisch freigibt. Es wird automatisch ausgeführt.

Empfohlenes Tutorial:

PHP-Video-Tutorial

Das 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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!