Heim >Backend-Entwicklung >PHP-Tutorial >Die Rolle des &-Symbols in PHP – Variablenreferenz, Funktionsreferenz, Objektreferenz

Die Rolle des &-Symbols in PHP – Variablenreferenz, Funktionsreferenz, Objektreferenz

巴扎黑
巴扎黑Original
2017-08-05 10:22:331773Durchsuche

PHP-Referenz (d. h. Hinzufügen eines kaufmännischen Und-Zeichens vor einer Variablen, Funktion, einem Objekt usw.) // Das Wichtigste ist, die referenzierte Variable zu löschen. Es ist nur so, dass auf die referenzierte Variable nicht zugegriffen werden kann Der Inhalt wird nicht zerstört. Die Bedeutung von Referenzen in PHP ist: Verschiedene Namen greifen auf denselben Variableninhalt zu der gleiche Inhalt


Ich werde nicht auf Details zur Call-by-Reference-Funktion und zur Call-by-Reference-Funktion eingehen direkt unten


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

Es ist zu beachten, dass bei Verwendung von test(1); ein Fehler auftritt: PHP schreibt das vor Die übergebene Referenz darf keine Konstante sein (siehe Fehlermeldung).

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

Schauen wir uns zuerst den Code an

Die folgende Erklärung: Auf diese Weise $ a Was =test(); tatsächlich zurückgibt, ist kein Unterschied zu einem gewöhnlichen Funktionsaufruf. Der Grund: Die Regelung von PHP schreibt vor, dass das, was von $a=&test(); zurückgegeben wird eine Funktionsreferenz. Was ist eine Referenzrückgabe? (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.) Dieser Unsinn hat mich lange nicht verstehen lassen Zeit

Verwendung Das obige Beispiel erklärt, dass der Aufruf einer Funktion in der Methode $a=test() den Wert der Funktion nur $a zuweist und dass sich Änderungen an $a nicht auf $b in der Funktion auswirken ,
<?phpfunction &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?>

Wenn eine Funktion über $a=&test() aufgerufen wird, besteht ihre Funktion darin, die Speicheradresse der $b-Variablen in
return $b

auf die gleiche Stelle wie die Speicheradresse zu verweisen der Variablen $a hat den gleichen Effekt ($a=&b;), daher ändert sich durch die Änderung des Werts von $a

auch der Wert von $b, sodass nach der Ausführung von $a=&test(); $a=5; , der Wert von $b wird 5Die statischen Variablen werden 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 Objects Quote

Der obige Code ist der laufende Effekt in PHP5


In PHP5 das Kopieren von Objekten wird durch Referenzen erreicht

<?phpclass a{    var $abc="ABC";
} 
$b=new a; 
$c=$b; 
echo $b->abc;//这里输出ABC echo $c->abc;//这里输出ABC $b->abc="DEF"; echo $c->abc;//这里输出DEF?>
. In der obigen Spalte ist $b=new a; $c=$b; eigentlich äquivalent zu $b=new $c=&$b; Ich möchte ein Objekt erstellen. Eine Kopie des Originalobjekts und hoffe, dass Änderungen am Originalobjekt keine Auswirkungen auf die Kopie haben. Zu diesem Zweck definiert PHP eine spezielle Methode namens __clone.

Die Rolle der Referenz 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 anschließend die Verwendung von $var= Null, um es zu löschen. In anderen Fällen wird die Standardmethode „php5“ verwendet. Außerdem wird für die Übertragung großer Arrays die Verwendung der „&“-Methode empfohlen.

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:

wird $b nicht deaktivieren, nur $a; function quoteTest(){ global $var; //Entspricht $var = &$GLOBALS['var']; //Durch das Löschen wird nur die Referenz gelöscht, der referenzierte Inhalt ist jedoch weiterhin vorhanden. Dies bedeutet nicht, dass der Variableninhalt zerstört wird.}$var=1;quoteTest();echo $var; // Ergebnis 1

---------------- --------- --------------------------- --------- -----------

wird $b nicht deaktivieren, nur $a .

function quoteTest(){ global $var ; //Entspricht $var = &$GLOBALS['var']; //Da beide auf den gleichen Speicherinhalt verweisen}$var =1 ;quoteTest();echo $var; //Ergebnis 5----------------------------------- ---------- -------------------------- ---------- -------

'&' Dies ist eine Referenz

globale Referenz Beim Deklarieren einer Variablen mit global $var, es erstellt tatsächlich eine globale Variable. Das ist dasselbe wie:

Das bedeutet zum Beispiel, dass $var Global-Variablen gelöscht werden nicht deaktiviert werden.

$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. Die Referenz in PHP verwendet „Kopieren“. „on-write“ Das Prinzip besteht darin, dass Variablen oder Objekte, die auf dieselbe Adresse zeigen, nicht kopiert werden, es sei denn, es erfolgt ein Schreibvorgang.

Um es für Laien auszudrücken: 1: Wenn es den folgenden Code gibt: $a="ABC" [/php] Tatsächlich zeigen $a und $b beide auf dasselbe Speicheradresse zu diesem Zeitpunkt Es ist nicht so, dass $a und $b unterschiedliche Speicher belegen

2: Wenn Sie den folgenden Code zum obigen Code hinzufügen [php] $a="EFG" [/php] Da die Daten im Speicher, auf die $a und $b zeigen, neu geschrieben werden, ist dies der Fall Zu diesem Zeitpunkt ermittelt und erstellt der Zend-Kern automatisch eine Datenkopie von $a für $b und beantragt erneut ein Stück Speicher zur Speicherung

Das obige ist der detaillierte Inhalt vonDie Rolle des &-Symbols in PHP – Variablenreferenz, Funktionsreferenz, Objektreferenz. 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