Heim  >  Artikel  >  Backend-Entwicklung  >  Verwendung der PHP-Referenz (&).

Verwendung der PHP-Referenz (&).

韦小宝
韦小宝Original
2017-11-24 09:26:451930Durchsuche

zitiert in PHP bedeutet: Verschiedene Namen greifen auf denselben Variableninhalt zu. Es gibt Unterschiede zwischen PHP und Zeigern in der C-Sprache. Der Zeiger in der Sprache C speichert die Adresse, an der der Inhalt der Variablen im Speicher gespeichert ist. Werfen wir einen Blick auf PHP Quote (&)-Nutzung

Variablenreferenz
Die PHP-Referenz ermöglicht es Ihnen, zwei Variablen zum Zeigen zu verwenden zum gleichen Inhalt.

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

Pass-by-Reference-Aufruf der Funktion
Ich werde nicht viel über den Pass-by-Reference-Aufruf sagen. Der Code ist direkt unten angegeben.

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

Es ist zu beachten, dass bei Verwendung von test(1); ein Fehler auftritt.
Die Referenzrückgabe der Funktion
Sehen Sie sich die an Code zuerst

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

Erklärung unten:
Was Sie auf diese Weise erhalten: $a=test(); ist eigentlich keine Funktionsreferenzrückgabe. Es unterscheidet sich nicht von einem gewöhnlichen Funktionsaufruf Der Grund: Dies ist die Regulierung von PHP
PHP-Regulierung Was durch $a=&test(); erhalten wird, ist die Referenzrückgabe der Funktion
Was eine Referenzrückgabe ist (im PHP-Handbuch heißt es: Referenzrückgabe). wird verwendet, wenn Sie eine Funktion verwenden möchten, um herauszufinden, an welche Variable die Referenz gebunden werden soll.) Wenn es um das oben Gesagte geht.) Ich konnte diesen Unsinn lange Zeit nicht verstehen
Verwenden Sie das obige Beispiel, um es zu erklären dass der Aufruf einer Funktion mit $a=test() lediglich den Wert der Funktion $a zuweist und $ Alle an a vorgenommenen Änderungen keinen Einfluss auf $b
in der Funktion haben, wenn die Funktion über $a= aufgerufen wird &test(), seine Funktion besteht darin, die Speicheradresse der $b-Variablen in $b mit der $a-Variablen zu vergleichen. Die Speicheradresse zeigt auf dieselbe Stelle
, was den entsprechenden Effekt 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();
$a=5;
Danach der Wert von $b 5 wird

Dies dient dem Verständnis für alle Die Referenzrückgabe der Funktion vor der Verwendung statischer Variablen. Tatsächlich wird die Referenzrückgabe der Funktion hauptsächlich im
Objekt

<?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
?>
Der obige Code wird ausgeführt Wirkung in PHP5

In PHP5 wird das Kopieren von Objekten durch Referenzen erreicht. In der obigen Spalte ist $b=new a; $c=$b; tatsächlich äquivalent zu $b=new $c=&$b;
Die Standardeinstellung in PHP5 ist, dass Objekte per Referenz aufgerufen werden 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.
Die Rolle von Referenzen
Wenn das Programm vorhanden ist relativ groß, Referenzen Es gibt viele Variablen im selben Objekt, und Sie möchten es manuell löschen, nachdem Sie das Objekt verwendet haben. Persönlich wird empfohlen, die Methode „&“ zu verwenden und sie dann mit $var=null zu löschen 🎜>Andere
verwenden Sie die Standardmethode von PHP5. Darüber hinaus wird für die Übertragung großer Arrays in PHP5 empfohlen, die Methode „&“ zu verwenden, da dadurch Speicherplatz gespart wird. 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:

setzt $b nicht zurück, sondern nur $a.
<?php
$a = 1;
$b =& $a;
unset ($a);
?>

Globale Referenz

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


Das bedeutet, dass beispielsweise unset $var eine globale Variable nicht zurücksetzt.
<?php
$var =& $GLOBALS["var"];
?>


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



//Hier ist eine weitere kleine Episode

Die Zeigerfunktion (ähnlich dem Zeiger) der Adresse in PHP wird nicht vom Benutzer selbst implementiert, sondern vom Zend-Kern implementiert und referenziert in PHP. Es handelt sich um das „Copy-on-Write“-Prinzip, das heißt, solange kein Schreibvorgang stattfindet, werden Variablen oder Objekte, die auf dieselbe Adresse zeigen, nicht kopiert.

Laienhaft ausgedrückt
1: Wenn es den folgenden Code gibt


Tatsächlich verweisen $a und $b zu diesem Zeitpunkt auf dieselbe Speicheradresse, nicht auf $a und $b belegen unterschiedlichen Speicher
$a="ABC";
$b=$a;
2: Wenn der folgende Code zum obigen Code hinzugefügt wird



$a="EFG";



Weil $a und $ Die Daten im Speicher, auf den b zeigt, müssen neu geschrieben werden. Zu diesem Zeitpunkt ermittelt und erstellt der Zend-Kern automatisch eine Datenkopie von $a für $b und beantragt erneut einen Speicherbereich.


Verwandte Empfehlungen:

Mehrere gängige Sitzungsfunktionen in PHP

Der Unterschied zwischen 0 und null in PHP

Die vollständigste PHP-String-

Verarbeitungsfunktion

Das obige ist der detaillierte Inhalt vonVerwendung der PHP-Referenz (&).. 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