Heim > Artikel > Backend-Entwicklung > PHP-Referenz
Die sogenannte Referenz in PHP bedeutet, dass unterschiedliche Namen auf denselben Variableninhalt zugreifen. Es kann für Variablen, Funktionen und Objekte verwendet werden, indem das kaufmännische Und davor eingefügt wird. Lassen Sie uns ausführlich über die Arten und Funktionen von Referenzen sprechen:
1. Referenztypen
1.1. Variablenreferenzen: Zwei Variablen verweisen auf denselben Inhalt
PHP-Code
<?php $a = "abc"; $b = &$a; echo $a;//这里输出:abc echo $b;//这里输出:abc $b = "done"; echo $a;//这里$a的值变为done, 所以输出done echo $b;//这里输出done ?>
1.2. Funktionsübertragungsreferenz
PHP-Code
function test(&$a) { $a=$a+100; } $b=1; test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值,就可以改变$b的值了 echo $b;//输出101
Es ist zu beachten, dass in Hier test(1); wird schief gehen, denken Sie selbst über den Grund nach
1.3, Funktionsreferenz
PHP-Code
function &test() { static $b=0;//申明一个静态变量 $b=$b+1; echo $b; return $b; } $a=test();//$b的值:1 $a=5; $a=test();//$b的值:2 $a=&test();//$b的值:3 $a=5; $a=test();//$b的值:6
wird erklärt wie folgt:
Durch den Aufruf einer Funktion mit $a=test() wird der Wert der Funktion nur $a zugewiesen, und alle Änderungen an $a wirken sich nicht auf $b in der Funktion aus. Allerdings gilt $a=&test(). Beim Aufruf einer Funktion besteht ihre Funktion darin, die Speicheradresse der Variablen $b als Rückgabewert $b und die Speicheradresse der Variablen $a auf dieselbe Stelle zu verweisen, was das Äquivalent dieses Effekts erzeugt ($a=&b;). Wenn Sie also den Wert von $a ändern, ändert sich auch der Wert von $b, sodass nach der Ausführung von
$a=&test();
Danach wird der Wert von $b zu 5
Statische Variablen werden hier verwendet, um das Verständnis von Funktionsreferenzrückgaben zu erleichtern. Tatsächlich werden Funktionsreferenzrückgaben hauptsächlich in Objekten verwendet
1.4. Objektreferenz PHP-Code
class testa { var $abc="ABC"; } $b=new testa; $c = &$b; // or $c = $b; echo $b->abc;//这里输出ABC echo $c->abc;//这里输出ABC $b->abc="DEF"; echo $c->abc;//这里输出DEFDer obige Code ist der laufende Effekt in PHP5
In PHP5 ist das Kopieren von Objekten dies wird durch Referenzen erreicht. Im obigen Beispiel ist $b=new a; $c=$b; tatsächlich äquivalent zu $b=new $c=&$b; Möglicherweise möchten Sie eine Kopie eines Objekts erstellen und hoffen, dass Änderungen am Originalobjekt keine Auswirkungen auf die Kopie haben. Zu diesem Zweck definiert PHP eine spezielle Methode namens __clone
2. Die Rolle von Referenzen
3. Referenz aufheben
<?php $a = 1; $b =& $a; unset ($a); ?>
Ein weiteres Beispiel ist die globale Referenz. Bei der Deklaration einer Variablen mit globaler $var wird tatsächlich eine Referenz auf die globale Variable erstellt. Das ist dasselbe wie:
<?php $var =& $GLOBALS["var"]; ?>
Referenz von $this: In einer Methode eines Objekts ist $this immer eine Referenz auf das Objekt, das es aufruft.
PS:
Ein Vorteil von PHP ist, dass es seinen automatischen Garbage-Collection-Mechanismus (Freigabespeicher) nutzen kann. Das heißt, Sie müssen nach der Verwendung der Variablen keine Verarbeitung durchführen, um den Speicher freizugeben. PHP übernimmt dies für Sie. Natürlich können wir bei Bedarf die Funktion unset() aufrufen, um den Speicher freizugeben, aber im Allgemeinen ist dies nicht erforderlich.
In PHP gibt es jedoch mindestens eine Situation, in der der Speicher nicht automatisch freigegeben wird, wie folgt:
Zu diesem Zeitpunkt, auch wenn unset() manuell aufgerufen wird. Details finden Sie unter: http://bugs.php.net/bug.php?id=33595.
Der Kompromiss besteht darin, die Methode __destruct() im Objekt in der Funktion unset() aufzurufen
--------------------------------- -- -------------------------------------
Ergänzung:
Die Zeigerfunktion (ähnlich dem Zeiger) der Adresse in PHP wird nicht vom Benutzer selbst implementiert, sondern vom Zend-Kern. Die Referenz in PHP übernimmt das Prinzip „Kopieren beim Schreiben“. Das heißt, solange kein Schreibvorgang erfolgt, werden Variablen oder Objekte, die auf dieselbe Adresse zeigen, nicht kopiert.
Laienhaft ausgedrückt
1: Wenn es den folgenden Code gibt:
$a="ABC"
$b=$a; Zu diesem Zeitpunkt zeigen $a und $b beide auf dieselbe Speicheradresse, anstatt dass $a und $b unterschiedliche Speicher belegen
2: Wenn Sie den folgenden Code zum obigen Code hinzufügen
$a="EFG";
Da die Daten im Speicher, auf die $a und $b zeigen, neu geschrieben werden müssen, beurteilt der Zend-Kern zu diesem Zeitpunkt automatisch und erzeugt automatisch Daten von $a für $b. Kopieren Sie ein Stück Speicher und wenden Sie es erneut zur Speicherung an.