PHP-Referenz (d. h. das Hinzufügen eines &-Symbols vor einer Variablen, Funktion, einem Objekt usw.)
Die Bedeutung einer Referenz in PHP ist: Verschiedene Namen greifen auf denselben Variableninhalt zu.
Variablenreferenz
Mit der PHP-Referenz können Sie zwei Variablen verwenden, um auf denselben Inhalt zu verweisen
Beispiel 1:
php
$a="2010";
$b =&$a;
echo $a;//Ausgabe hier: 2010
echo $b; //Ausgabe hier: 2010
$b="2012";
echo $a;//Der Wert von $a ändert sich hier in 2012, also Ausgabe
echo $b ;//Ausgabe 2012 hier
?>
Beispiel 2:
$a = "date" ;
$b = &$a;
echo $a; // Datum
echo $b; // Datum
$b = " date1";
echo $a; // date1
echo $b; // date1
unset($a);
echo $b ; // date1
?>
Aus den beiden obigen Beispielen geht hervor, dass die Zuweisung der Speicheradresse von $b an $b keine einfache Zuweisung ist. Daher wirkt sich jede Operation auf $b
auch auf $a
aus. Anders ausgedrückt: Wenn Sie $a löschen, löschen Sie dieses Der Name der Variablen löscht nicht den Inhalt der Variablen. Durch die Verwendung eines Alias kann der Inhalt der Variablen weiterhin angezeigt werden. (Wie in der Abbildung gezeigt)
Funktionsaufruf nach Adresse
Beispiel 3:
Funktionstest ( &$a)
{
$a=$a+100;
}
$b=1;
echo $b;//Ausgabe 1
//Was $b hier an die Funktion übergibt, ist tatsächlich die Speicheradresse, an der sich der Variableninhalt von $b befindet. Durch Ändern des Werts von $a in der Funktion. Sie können den Wert von $b ändern.
test($b;//Output 101
?>
So testen Sie (1) hier ;, es tritt ein Fehler auf
zeigt an, dass Parameter nur Variablen sein können und Konstanten keine Adressen haben.
Funktionsreferenzrückgabe
Funktionsreferenzrückgabe wird hauptsächlich in Objekten verwendet. Verwenden Sie hier statische Variablen als Beispiel.
Beispiel 4:
function &test()
{
static $b=0;//Eine statische Variable deklarieren
$b=$b+1;
echo $b;
return $b;
}
//Diese Anweisung wird ausgegeben $b Der Wert ist 1
$a=test();
$a=5;
$a=test();//Diese Anweisung gibt $ aus b Der Wert ist 2
$a=&test();//Diese Anweisung gibt den Wert von $b ist 3
$a=5;<🎜 aus >
$a=test();//Diese Anweisung gibt den Wert von $b als 6 ausKommentar, diese Funktion hat eine Ausgabe und gibt einen Wert zurück. $a = test(); Es weist nur den Rückgabewert $b der Funktion test zu. Es handelt sich lediglich um eine normale Zuweisung, nicht um eine Referenzrückgabe der Funktion. Unabhängig davon, welche Operationen $a ausführt, hat dies keine Auswirkungen auf $b. $a = &test(); Die Funktion besteht darin, die Speicheradresse von $b und die Speicheradresse von $a auf dieselbe Stelle zu verweisen, was einen ähnlichen Effekt wie $b = &$a erzeugt. Wenn sich der Wert von $a ändert, also 5 wird, wirkt sich dies auch auf den Wert von $b aus. Wenn also $a = &test(); $a = 5 ausgeführt wird, wird $b = 5 generiert. Nach der Funktionsverarbeitung wird $b = 6 ausgegeben ObjektreferenzBeispiel 5:class a{var $abc="ABC";}$b=new a;$c=$b;echo $b->abc;//ABC hier ausgeben
echo $c->abc;//ABC hier ausgeben$b->abc="DEF";echo $c->abc; //Here Output DEF?>Der obige Code ist der Effekt der Ausführung in PHP5. In PHP5 wird das Kopieren von Objekten durch Referenzen erreicht. $b=new a; $c=$b; in der obigen Spalte entspricht tatsächlich $b=new $c=&$b;Der Standardwert in PHP5 ist per Referenz aufrufen, um das Objekt aufzurufen. Manchmal möchten Sie jedoch möglicherweise eine Kopie des Objekts erstellen und hoffen, dass Änderungen am Originalobjekt keine Auswirkungen auf die Kopie haben. Für solche Zwecke definiert PHP eine spezielle Methode namens __clone. Die Rolle von ReferenzenWenn das Programm relativ groß ist und viele Variablen auf dasselbe Objekt verweisen und Sie das Objekt nach der Verwendung manuell löschen möchten, wird es gelöscht Es wird empfohlen, die Methode „&“ zu verwenden und sie dann mit $var=null zu löschen. In anderen Fällen verwenden Sie einfach die Standardmethode von PHP5. Außerdem empfiehlt es sich für die Übertragung großer Arrays in PHP5, die „&“-Methode zu verwenden, schließlich spart sie Speicherplatz. 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. Zum Beispiel: $a = 1;$b =& $a;unset ( $a);?> wird $b nicht deaktivieren, nur $a. Sie können sich auf den Abschnitt zur Variablenreferenz beziehen Globale Referenz Wenn Sie eine Variable mit globalem $var deklarieren, erstellen Sie tatsächlich eine globale Variable . Zitat. Es entspricht dem folgenden Code: $var =& $GLOBALS["var"];? ; Dies bedeutet, dass beispielsweise das Deaktivieren von $var keine globale Variable deaktiviert. $thisIn einer Methode eines Objekts ist $this immer eine Referenz auf das Objekt, das es aufruft. Zusätzliche Anweisungen
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 „Copy-on-Write“. Sofern keine Schreiboperation stattfindet, werden Variablen oder Objekte, die auf dieselbe Adresse zeigen, nicht kopiert.
Angenommen, es gibt den folgenden Code:
$a="ABC";
$b=$a;
Ps: Ich persönlich denke, es sollte $ sein b = &$a, nur $a und $b können auf dieselbe Speicheradresse verweisen, aber die Informationen, auf die ich verwiesen habe, sagen dies. Derzeit weiß ich nicht viel über &. Wenn Freunde unterschiedliche Meinungen haben, können Sie sagen sie weiterleiten. Vielen Dank
Zu diesem Zeitpunkt verweisen $a und $b beide auf dieselbe Speicheradresse, anstatt dass $a und $b unterschiedliche Speicher belegen
Wenn es oben ist, fügen Sie auf der Grundlage des Codes den folgenden Code hinzu
$a="EFG";
Der Vorgang "Schreiben" wird hier ausgeführt
Weil $ a und $b zeigen auf Die Daten im Speicher müssen neu geschrieben werden. Zu diesem Zeitpunkt beurteilt der Zend-Kern automatisch, erstellt automatisch eine Datenkopie von $a für $b und beantragt erneut einen Speicherbereich .