Heim  >  Artikel  >  Das wahre Verständnis von Referenzen in PHP – Variablenreferenzen, Funktionsreferenzen, Objektreferenzen

Das wahre Verständnis von Referenzen in PHP – Variablenreferenzen, Funktionsreferenzen, Objektreferenzen

无忌哥哥
无忌哥哥Original
2018-06-27 15:49:471846Durchsuche

Variablenreferenz
Mit der PHP-Referenz können Sie zwei Variablen verwenden, um auf denselben Inhalt zu verweisen

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

Ich werde nicht auf Details zu Funktionsaufruf nach Adresse und Aufruf nach eingehen Adresse. Der Code ist direkt unten angegeben

rrree

Es ist zu beachten, dass bei Verwendung von test(1); ein Fehler auftritt: PHP legt fest, dass die übergebene Referenz keine Konstante sein kann (. Sie können die Fehlermeldung sehen).

Funktionsreferenzrückgabe Schauen 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: Auf diese Weise ist $a=test(); eigentlich keine Funktionsreferenzrückgabe, die mit einer gewöhnlichen Funktion identisch ist Aufrufe Es gibt keinen Unterschied: Die PHP-Vorschrift schreibt vor, dass das, was durch $a=&test(); erhalten wird, die Referenzrückgabe ist Im Handbuch heißt es: Die Referenzrückgabe wird verwendet, wenn Sie die Funktion verwenden möchten, um herauszufinden, an welche Variable die Referenz gebunden werden soll. ) Dieser Unsinn hat mich lange Zeit nicht verstehen lassen.

Verwenden Sie das obige Beispiel Erklären Sie, dass die Funktion mit $a=test() aufgerufen wird, wodurch nur der Wert der Funktion geändert wird. Der Wert wird nur $a zugewiesen, und alle Änderungen an $a wirken sich nicht auf $b in der Funktion aus, wenn die Funktion über $a aufgerufen wird =&test(), seine Funktion besteht darin, $b in $b zurückzugeben. Die Speicheradresse der Variablen und die Speicheradresse der Variablen $a zeigen auf denselben Ort, was den gleichen Effekt erzeugt ($a=&b;). Durch Ändern des Werts von $a ändert sich auch der Wert von $b, sodass nach der Ausführung von $ a=&test(); $a=5; von nun an der Wert von $b zu 5 wird Jeder versteht die Referenzrückgabe der Funktion, bevor er statische Variablen verwendet. Tatsächlich wird die Referenzrückgabe der Funktion hauptsächlich in Objekten verwendet. Die Referenz des

<?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 Laufeffekt in PHP5 In PHP5 wird das Kopieren von Objekten durch Referenzen erreicht. 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, wenn es viele Variablen gibt, die auf dasselbe Objekt verweisen, und Sie diese nach der Verwendung des Objekts manuell löschen möchten, empfehle ich persönlich die Verwendung der Methode „&“ und dann die Verwendung von $var=null zum Löschen In anderen Fällen verwenden Sie die Standardmethode von PHP5. Für die Übertragung großer Arrays in PHP5 wird außerdem 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. Zum Beispiel:


3376df679d3b06536643c3c617886f31

Das bedeutet zum Beispiel, dass $var Global-Variablen nicht gesetzt 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 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 $a und Die Daten im Speicher, auf die $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 Teil des Speichers zur Aufbewahrung

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