Referenzzuweisungsoperator in PHP, = &


Antworten:


121

Es ist nicht veraltet und es ist unwahrscheinlich. Dies ist die Standardmethode, um beispielsweise einen Teil eines Arrays oder Objektspiegels an einem anderen zu ändern, anstatt die vorhandenen Daten zu kopieren.

Es wird als Zuweisung durch Referenz bezeichnet , was, um das Handbuch zu zitieren, "bedeutet, dass beide Variablen auf dieselben Daten zeigen und nirgendwo etwas kopiert wird" .

Die Sache , nur die ist mit veraltet =&ist „Zuweisung des Ergebnisses der newdurch Bezugnahme“ in PHP 5 , die die Quelle jeglicher Verwirrung sein könnte. newwird automatisch als Referenz zugewiesen, &ist also redundant / veraltet in $o = &new C;, aber nicht in $o = &$c;.


Da die Suche schwierig ist, beachten Sie, dass =&( entspricht kaufmännischem Und ) dasselbe ist wie = &( entspricht kaufmännischem Leerzeichen ) und häufig so geschrieben wird, dass es auf die andere Variable wie $x = &$y['z'];oder $x = &$someVar( kaufmännisches Und-Dollarzeichen Variablenname ) trifft . Beispiel aus den Dokumenten vereinfacht:

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

Hier ist ein praktischer Link zu einem detaillierten Abschnitt über Zuweisen nach Referenz im PHP-Handbuch . Diese Seite ist Teil einer Reihe von Referenzen - es lohnt sich, sich eine Minute Zeit zu nehmen, um die ganze Reihe zu lesen.


8
Randnotiz zu: "da es schwer zu suchen ist" : symbolhound.com ist dein Freund für solche Sachen.
Billynoah

1
@billynoah Wow! symbolhound wird nun permanent zu meiner toolbox hinzugefügt.
Parapluie

26

Es sind zwei verschiedene Operatoren. =ist Aufgabe, wie Sie wahrscheinlich wissen. Und &bedeutet, dass auf die Variable eher als Referenz als als Wert zugegriffen werden sollte.


60
Es tut mir leid, aber das ist viel zu simpel. $ a = & $ b bedeutet, dass sich die Variable $ a auf dasselbe bezieht, was $ b gerade tut. Danach ist $ a = 5; führt auch dazu, dass $ b eine 5 hat. Der Referenzlink kann jedoch durch $ b = & $ xyz; oder nicht gesetzt ($ b); Zu diesem Zeitpunkt ist $ a die einzige Variable, die weiß, wo sich die Zelle befindet, in der sich die 5 befindet. Beachten Sie außerdem, dass Sie beim Festlegen von $ a using = & = & beim nächsten Mal (& deaktivieren ($ a)) verwenden müssen, um Änderungen vorzunehmen der Referenzlink von $ a, speziell $ a = NULL; wird die Verbindung nicht unterbrechen, sondern nur die 5 durch null ersetzen;
Don

8
@ Don: Danke für die Ausarbeitung. Ich kann Ihnen sagen, dass Sie ein C-Programmierer sind.
Asaph

8
Ich stimme dem zu, was Don sagt. Aber ich würde nicht sagen, dass dies viel zu simpel ist. Ich würde sagen, das ist falsch.
Artefacto

@Don solltest du deinen Kommentar wirklich als Antwort posten.
Adam

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

hat auch den Effekt, zu erstellen, $y['z']wenn es nicht existiert, und es auf zu setzen null.

Dies verhindert Fehlermeldungen, die Sie möglicherweise lesen wollten. Ich habe noch keine Dokumentation dazu gefunden. möglicherweise neu in 5.3, soweit ich weiß.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.