Beim Kopieren werden die Objektdaten tatsächlich in ein neues Objekt kopiert.
In diesem Beispiel werden die Daten nicht geklont:
%Vor% Wenn Foo
ein Mitglied a
hat und Sie p.a
ändern, ändert sich auch o.a
, weil sowohl p
als auch o
auf dasselbe Objekt zeigen.
Allerdings
%Vor% Wenn Sie in diesem Fall p.a
ändern, bleibt o.a
gleich, weil sie tatsächlich auf separate Objekte zeigen.
Es gibt zwei verschiedene Arten, Klon zu klonen: oberflächlicher Klon oder tiefer Klon.
Ein oberflächlicher Klon erzeugt nur ein neues Objekt und kopiert die Mitglieder in das neue Objekt. Das heißt, wenn eines der Elemente tatsächlich ein Zeiger auf ein anderes Objekt ist, wird dieses Objekt zwischen dem alten Objekt und dem neuen Objekt geteilt.
Ein tiefer Klon geht tatsächlich durch und klont alle Mitglieder in das neue Objekt. Auf diese Weise sind die Objekte vollständige Kopien aller Daten.
Allgemein gesprochene Objekte werden als Referenz übergeben. Wenn Sie also $objB=$objA
sagen, erhalten Sie kein neues Objekt. Sie erhalten einen neuen Namen für das gleiche Objekt. Wenn Sie jedoch $objB= clone $objA
sagen, erhalten Sie eine Kopie von $objA
. Im ersten Fall passiert auch, was Sie mit $objB
machen, auch mit $objA
. Im zweiten Fall ist $objB
unabhängig.
Tags und Links clone