Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Verwendung des Referenzsymbols (&) in PHP

Detaillierte Erläuterung der Verwendung des Referenzsymbols (&) in PHP

墨辰丷
墨辰丷Original
2018-05-29 17:35:381547Durchsuche

Die Referenz von PHP besteht darin, das &-Symbol vor der Variablen, Funktion, dem Objekt usw. hinzuzufügen. Die Referenz in PHP bedeutet: Verschiedene Namen greifen auf denselben Variableninhalt zu. Im Folgenden finden Sie eine Einführung in die Verwendung der Referenz von PHP. Freunde, die es brauchen, können darauf verweisen. Es gibt einen Unterschied zwischen

und Zeigern in der C-Sprache. Der Zeiger in der Sprache C speichert einen Verweis auf die Adressvariable, wo der Inhalt der Variablen im Speicher gespeichert wird.

Der Verweis von PHP ermöglicht es Ihnen, zwei Variablen zu verwenden, um auf denselben Inhalt zu verweisen

$a="ABC"; 
$b =&$a; 
echo $a;//这里输出:ABC 
echo $b;//这里输出:ABC 
$b="EFG"; 
echo $a;//这里$a的值变为EFG 所以输出EFG 
echo $b;//这里输出EFG

Pass-by-Address-Aufruf der Funktion

Ich werde nicht näher auf den Pass-by-Address-Aufruf eingehen

rrree

Es ist zu beachten, dass bei Verwendung von test(1); selbst über den Grund nachgedacht wird Die Referenzrückgabe der Funktion

Sehen Sie sich zuerst den Code an

<?php
function test(&$a) {
  $a = $a + 100;
}
$b = 1;
echo $b; //输出1
test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了
echo "<br>";
echo $b; //输出101

?>

Die folgende Erklärung:


In Auf diese Weise wird $a=test(); nicht tatsächlich durch einen Verweis auf die Funktion zurückgegeben, was sich von gewöhnlichen unterscheidet. Es gibt keinen Unterschied bei Funktionsaufrufen. Aus dem Grund: Dies ist die Regelung von PHP

PHP dass die Referenzrückgabe der Funktion durch $a=&test();

erhalten wird. Was ist die Referenzrückgabe (im PHP-Handbuch heißt es: Referenzrückgabe wird verwendet, wenn Sie eine Funktion verwenden möchten, um herauszufinden, welche Variable die Referenz ist). sollte gebunden sein.) Dieser Unsinn hat mich lange Zeit unfähig gemacht, ihn zu verstehen


Verwenden Sie das obige Beispiel, um es zu erklären


Aufruf einer Funktion mit $a= test() weist nur den Wert der Funktion $a zu, und alle Änderungen an $a wirken sich nicht auf $b in der Funktion aus. Über die Methode $a=&test() wird eine Funktion aufgerufen, deren Funktion darin besteht, auf die Speicheradresse zu verweisen Die $b-Variable gibt $b und die Speicheradresse der $a-Variablen an dieselbe Stelle zurück, was das Äquivalent dieses Effekts erzeugt ($a=&b; ). Wenn man also den Wert von $a ändert, ändert sich auch der Wert von $b , also nach der Ausführung von


$a=&test();

$a=5; Danach der Wert von $ b wird zu 5

Die statische Variable wird hier verwendet, um jedem die Referenzrückgabe der Funktion verständlich zu machen. Tatsächlich wird die Referenzrückgabe der Funktion hauptsächlich in Objekten verwendet 🎜>

Objekt



<?php
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

?>

Der obige Code ist der Effekt der Ausführung in PHP5

In PHP5 wird das Kopieren von Objekten durch Referenzen implementiert. In der obigen Spalte ist $b=new a; $c=$b; eigentlich ä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

referenzierte Funktion


Wenn das Programm relativ groß ist, viele Variablen auf dasselbe Objekt verweisen und Sie das Objekt nach der Verwendung manuell löschen möchten, empfehle ich persönlich die Verwendung der Methode „&“. und dann die Methode $var =null zum Löschen verwenden. Außerdem wird für die Übertragung großer Arrays in PHP5 empfohlen, die Methode „&“ zu verwenden, da dies Speicherplatz spart .

Referenz aufheben

Wenn Sie eine Referenz aufheben, brechen Sie einfach die Bindung zwischen dem Variablennamen und dem Variableninhalt auf. Dies bedeutet nicht, dass die Variableninhalte zerstört werden. Beispiel:

<?php
class a {
  var $abc = "ABC";
}
$b = new a;
$c = $b;
echo $b->abc; //这里输出ABC
echo $c->abc; //这里输出ABC
$b->abc = "DEF";
echo $c->abc; //这里输出DEF

?>

wird $b nicht deaktivieren, sondern nur $a.

Globale Referenz

Wenn Sie eine Variable mit globalem $var deklarieren, erstellen Sie tatsächlich eine Referenz auf die globale Variable. Das ist dasselbe wie:

$a = 1; 
$b =& $a; 
unset ($a);

Das bedeutet, dass beispielsweise unset $var eine globale Variable nicht zurücksetzt.

$this

In einer Methode eines Objekts ist $this immer eine Referenz auf das Objekt, das es aufruft.

//Hier ist noch eine kleine Episode
Die Zeigerfunktion (ähnlich dem Zeiger) der Adresse in PHP wird nicht vom Benutzer selbst implementiert, sondern von ihm Zend Core, die Referenz in PHP übernimmt das Prinzip „Copy-on-Write“, das heißt, solange keine Schreiboperation stattfindet, werden Variablen oder Objekte, die auf dieselbe Adresse zeigen, nicht kopiert.


Laienhaft ausgedrückt


1: Wenn es den folgenden Code gibt


$var =& $GLOBALS["var"];


Tatsächlich , zu diesem Zeitpunkt verweisen $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="ABC"; 
$b=$a;

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.

Verwandte Empfehlungen:

PHP

Der Vorteil des Hinzufügens eines Namespace besteht darin, das automatische Laden zu erleichtern

PHPFehlerstufeneinstellung und Prinzipanalyse

PHP-Flow-Control-Break-Anweisung
Continue-Anweisung für PHP-Flusskontrolle


Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung des Referenzsymbols (&) in PHP. 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