Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Wissens über PHP-Referenzvariablen

Detaillierte Erläuterung des Wissens über PHP-Referenzvariablen

不言
不言Original
2018-04-28 13:45:232438Durchsuche


Dieser Artikel stellt hauptsächlich das detaillierte Wissen über PHP-Referenzvariablen vor. Jetzt kann ich es mit Ihnen teilen.

  • Konzept: Referenz in PHP bedeutet, auf denselben Variableninhalt mit unterschiedlichen Namen zuzugreifen

  • Definitionsmethode: PHP verwendet '&; 'Referenzvariablen definieren;

  • Wenn keine Referenzen verwendet werden, verwenden Variablen einen Copy-on-Write-Mechanismus (COW): Eine Kopie des Speichers wird zur Änderung kopiert Schreiben, zum Beispiel

//定义一个变量
$a = range(0,1000);
var_dump(memory_get_usage()); //打印内存使用量
//定义一个变量b
$b = $a; //此时$b和$a 指向同一个内存空间
var_dump(memory_get_usage());
//当a或b发生写入时,才会复制一块内存进行修改
$a = range(0,1000);
var_dump(memory_get_usage());

Laufergebnisse: Die Speichernutzung war beim ersten und zweiten Drucken ähnlich, beim dritten Mal gab es jedoch eine signifikante Änderung, was darauf hinweist, dass bei der Ausführung von a Beim Schreiben des Vorgangs ist die Speichernutzung beim Kopieren aufgetreten.


  • Bei Verwendung einer Referenz zeigt die Variable auf denselben Speicherplatz und ändert sich währenddessen nicht Schreibvorgang.

//定义一个变量
$a = range(0,1000);
var_dump(memory_get_usage()); //打印内存使用量
//定义一个变量b
$b = &$a; //将a的空间赋值给b,a与b指向同一空间
var_dump(memory_get_usage());
//当a或b发生写入时,内存不会发生复制
$a = range(0,1000);
var_dump(memory_get_usage());

Betriebsergebnisse: Der Speicher hat sich nicht wesentlich geändert

Überprüft durch den zval-Variablencontainer

//通过zval变量容器打印
$a = range(0,3);
xdebug_debug_zval('a');//打印 指向内存空间的变量数,和是否被引用
$c =&$a;
xdebug_debug_zval('a');
$c = range(0,3);
xdebug_debug_zval('a');

Laufergebnisse:

Beim Schreiben in c gibt es immer noch zwei Variablen, die auf den Speicher verweisen, und es findet kein Copy-on-Write statt



  • unset löscht nur die Referenz und zerstört nicht den Raum

  • In PHP wird das Objekt selbst übergeben durch Referenz und erfordert keine Referenzsymbole

class Person{
    public $name  = "zhangsan";
}
$p1 = new Person();
xdebug_debug_zval('p1');

$p2 = $p1;
xdebug_debug_zval('p1');

$p2->name = "lesi";
xdebug_debug_zval('p1');


Verwandte Empfehlungen:

Ausführliche Erklärung der PHP-Referenzdefinition und der Verwendung von Referenzübergabeparameterinstanzen


Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Wissens über PHP-Referenzvariablen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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