Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung der PHP-Referenz und des PHP-Symbols

Detaillierte Erklärung der PHP-Referenz und des PHP-Symbols

巴扎黑
巴扎黑Original
2016-11-24 10:53:051076Durchsuche

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:

$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 aus

Kommentar, 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

Objektreferenz

Beispiel 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 Referenzen

Wenn 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.

$this

In 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 .


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
Vorheriger Artikel:PHP-String-FunktionenNächster Artikel:PHP-String-Funktionen