Heim > Backend-Entwicklung > PHP-Problem > Welche zwei Möglichkeiten gibt es, Variablen in PHP zu zerstören?

Welche zwei Möglichkeiten gibt es, Variablen in PHP zu zerstören?

青灯夜游
Freigeben: 2023-03-12 22:02:01
Original
3094 Leute haben es durchsucht

Zwei Möglichkeiten, Variablen in PHP zu zerstören: 1. Verwenden Sie die Funktion unset() mit der Syntax „unset($varname)“ 2. Weisen Sie der angegebenen Variablen den Wert „NULL“ mit der Syntax „$varname“ zu =null;".

Welche zwei Möglichkeiten gibt es, Variablen in PHP zu zerstören?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, PHP-Version 7.1, DELL G3-Computer

Die Zerstörung von Variablen oder Objekten in PHP kann in explizite Zerstörung und implizite Zerstörung unterteilt werden:

1 . Explizite Zerstörung: Wenn das Objekt nicht referenziert wird, wird es zerstört, sodass wir es aufheben oder NULL zuweisen können.

2 Implizite Zerstörung: PHP ist eine Skriptsprache, die alle angewendet wird Der Speicher wird zerstört. Release.

Daher gibt es zwei Möglichkeiten, Variablen zu zerstören:

  • unset()unset()

  • $varname=null

举例来说:

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);
Nach dem Login kopieren

结果如下:

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

首先我们要知道,在PHP中,变量名是存储在内存栈中,它是指向堆中具体内存的地址,通过变量名查找堆中的内存; 因此我们可以得出结论:

<?php
$a = 1;
$b = &$a;
unset($a);
var_dump($a); 
var_dump($b);
Nach dem Login kopieren

结果是:

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

所以unset()并没有真正销毁变量中内存值,仅仅是切断了变量与内存之间的关系,并将变量名也给干掉了,但内存只要还被引用着就不会被释放; 而在PHP中对象的传值默认是引用传值,这也解释了Human类中,$a被unset()了,但是$b =$c = $d 一样有值。

$varname=null,变量名依然存在,但是内存值却被干掉了。那么在引用传值的情况下又是如何呢?举例:

<?php        
$a = 1;        
$b = &$a;        
$a=null;        
var_dump($a);        
var_dump($b);
Nach dem Login kopieren

输出的结果是:

NULL NULL
Nach dem Login kopieren

所以,$varname=null

$varname=null li>

Zum Beispiel: 🎜🎜rrreee🎜Das Ergebnis ist wie folgt: 🎜rrreee🎜Zunächst müssen wir wissen, dass in PHP der Variablenname im Speicherstapel gespeichert ist zeigt auf die Adresse des spezifischen Speichers im Heap. Finden Sie den Speicher im Heap über den Variablennamen. Daraus können wir schließen: 🎜rrreee🎜Das Ergebnis ist: 🎜🎜rrreee🎜Unset() zerstört also nicht wirklich den Speicherwert In der Variablen wird lediglich die Beziehung zwischen der Variablen und dem Speicher unterbrochen, und der Variablenname wird ebenfalls entfernt. Der Speicher wird jedoch nicht freigegeben, solange in PHP noch auf den Wert eines Objekts verwiesen wird standardmäßig per Referenz, was auch erklärt, dass in der Human-Klasse $a unset( ) ist, $b =$c = $d aber immer noch einen Wert hat. 🎜🎜$varname=null, der Variablenname existiert noch, aber der Speicherwert wird gelöscht. Was ist also mit der Pass-by-Reference? Beispiel: 🎜rrreee🎜Das Ausgabeergebnis lautet: 🎜rrreee🎜Also $varname=null, obwohl der Variablenname und der Speicherzeiger noch vorhanden sind, wird der Wert im Speicher vollständig gelöscht. 🎜🎜Empfohlenes Lernen: „🎜PHP-Video-Tutorial🎜“🎜

Das obige ist der detaillierte Inhalt vonWelche zwei Möglichkeiten gibt es, Variablen in PHP zu zerstören?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
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