Was macht der =&
(equals-kaufmännische) Zuweisungsoperator in PHP?Referenzzuweisungsoperator in PHP, = &
Ist es veraltet?
Was macht der =&
(equals-kaufmännische) Zuweisungsoperator in PHP?Referenzzuweisungsoperator in PHP, = &
Ist es veraltet?
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.
Es sind zwei verschiedene Operatoren. =
ist Aufgabe, wie Sie wahrscheinlich wissen. Und &
bedeutet, dass die Variable durch Verweis statt durch Wert zugegriffen werden sollte.
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
@Don: Danke für die Ausarbeitung. Ich kann dir sagen, dass du ein C-Programmierer bist. – Asaph
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
$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ß.
Siehe auch http://StackOverflow.com/questions/3200009 (als Duplikat markiert) – Artefacto