2009-11-20 1 views

Antwort

73

Es ist nicht veraltet und wird es wahrscheinlich nicht sein. Dies ist die Standardmethode, um beispielsweise Änderungen an einem Array oder Objektspiegel an einem anderen vorzunehmen, anstatt die vorhandenen Daten zu kopieren.

Es heißt Zuweisung durch Verweis, die, um das Handbuch, "means that both variables end up pointing at the same data, and nothing is copied anywhere" zu zitieren.

Das einzige, was ist veraltet mit =& wird in PHP 5 „das Ergebnis der new durch Bezugnahme zuweisen“, der die Quelle aller Verwirrung sein könnte. new wird automatisch per Referenz zugewiesen, daher ist & redundant/veraltet in $o = &new C;, aber nicht in $o = &$c;.


Da ist es schwer zu finden, beachten Sie, dass =& (gleich Ampersand) ist die gleiche wie = & (gleich Raum Ampersand) und oft so geschrieben ist, dass er in die andere Variable läuft wie $x = &$y['z']; oder $x = &$someVar (kaufmännisches Dollarzeichen variabler Name). Beispiel aus der Dokumentation vereinfacht:

$a = 3; 
$b = &$a; 
$a = 4; 
print "$b"; // prints 4 

Hier ist ein handliches Link zu einer detailed section on Assign By Reference in the PHP manual. Diese Seite ist Teil einer Reihe von Referenzen - es lohnt sich, eine Minute zu nehmen, um die ganze Serie zu lesen.

+11

Es dauert mehr als eine Minute, um die ganze Serie zu lesen – Pacerier

+3

Seitennotiz re: * "da es schwer zu suchen ist" *: http://symbolhound.com ist dein Freund für solche Sachen. – billynoah

21

Es sind zwei verschiedene Operatoren. = ist Aufgabe, wie Sie wahrscheinlich wissen. Und & bedeutet, dass die Variable durch Verweis statt durch Wert zugegriffen werden sollte.

+51

Es tut mir leid, aber das ist viel zu einfach. $ a = & $ b bedeutet, dass die Variable $ a sich auf das bezieht, was $ b gerade tut. Danach ist $ a = 5; wird auch dazu führen, dass $ b eine 5 hat. Der Referenzlink kann jedoch durch $ b = & $xyz; oder unset ($ b) unterbrochen werden; Zu diesem Zeitpunkt ist $ a die einzige Variable, die weiß, wo die Zelle ist, die die 5 enthält. Beachten Sie auch, dass wenn Sie $ a using = & setzen, müssen Sie = & next time (oder unset ($ a)) ändern die Referenzverbindung von $ a, speziell $ a = NULL; wird den Link nicht unterbrechen, er ersetzt nur die 5 durch null; – Don

+7

@Don: Danke für die Ausarbeitung. Ich kann dir sagen, dass du ein C-Programmierer bist. – Asaph

+6

Ich zweite, was Don sagt. Aber ich würde nicht sagen, dass das viel zu einfach ist. Ich würde sagen, das ist falsch. – Artefacto

5
$x = &$y['z']; 

hat auch die Wirkung von $y['z'] zu schaffen, wenn es nicht vorhanden ist, und es zu null Einstellung.

Dies verhindert Fehlermeldungen, die Sie möglicherweise gelesen haben möchten. Ich habe noch keine Dokumentation dazu gefunden; möglicherweise neu in 5.3, für alles, was ich weiß.