Im folgenden Beispiel ändert jede Operation, die von $ instance2 und $ instance3 ausgeführt wird, das ursprüngliche Objekt.
Meine Frage ist:
Wenn die Kopie des ursprünglichen Objektbezeichners und der Verweis auf den ursprünglichen Objektbezeichner denselben Job ausführt. Welcher sollte in realen Anwendungen verwendet werden?
Was sind die Vor- und Nachteile der Kopie der Objektkennung und der Referenz auf die Objektkennung?
Ich habe das php-Handbuch gelesen, kann aber nicht in Bezug auf die Verwendung unterscheiden, da beide dasselbe tun Job.
%Vor% $instance2
hat eine Kopie des Bezeichners für den Objekttest. Also, es enthält das gleiche wie $instance1
.
$instance3
enthält einen Verweis auf $instance1
. Der Unterschied wäre der folgende:
Die gleiche Ausgabe würde zurückgegeben, wenn $instance1
anstelle von $instance3
geändert wurde.
Aber wenn wir Folgendes getan haben:
%Vor%Also:
Die Modifikation einer Variablen, die durch Referenz erzeugt wurde (mit dem Operanden &
) oder der Variablen, auf die verwiesen wird, ändert beides, während die Modifikation einer kopierten Variablen nur die gegebene Variable modifiziert.
Sie müssen sich jedoch daran erinnern, dass $instance1
was hält, eine Kennung des Objekts ist, also:
Ich hoffe, es ist jetzt klarer.
Bei Objekten in PHP5 wird anstelle des gesamten Objekts nur die Objektkennung kopiert. Dadurch müssen Sie nicht mehr auf denselben Wert verweisen und stattdessen können Sie den Bezeichner kopieren, um auf dasselbe Objekt zu verweisen. Nutze es zu deinem Vorteil; Sie können die Ampersands loswerden.
Ein wichtiger Unterschied besteht darin, dass die Zuweisung zu einer Variablenreferenz die ursprüngliche Variable beeinflusst, während die Zuweisung zu einer kopierten Objektkennung nicht funktioniert. Nur Änderungen am Objekt würden. Wenn Sie OO auf intuitive Weise verwenden möchten, wäre dies ein Grund nicht Objektverweise zu verwenden. Beispiel:
%Vor%Siehe auch diesen Artikel, warum die Verwendung von (kaufmännischen) Referenzen vermieden werden sollte: