Klonen von Objekten

Klonen von Objekten bedeutet, eine Kopie eines Objektes anzulegen, die dann als eigenständiges Objekt weiterexistiert. Dabei ist das Kopieren eines Objektes nicht trivial, da Objekte häufig auf weitere Objekte referenzieren, die wiederum auf weitere Objekte referenzieren. Man kann nun entweder das Objekt flach kopieren, indem die referenzierten Objekte nicht dupliziert werden oder es ist möglich tief zu kopieren, indem auch referenzierte Objekte mit geklont werden. Im letzteren Fall kann es sein, dass man alle sich im Speicher befindlichen Objekte mitklont, da diese in der Referenzierungskette alle irgendwann auftauchen.

PHP löst das Problem, indem es dem Entwickler die Entscheidung überlässt, wie tief geklont werden soll. Wenn der Entwickler das Sprachkonstrukt clone einsetzt, so wird zunächst eine flache Kopie des Objektes erstellt. Wenn in der Klasse des geklonten Objektes die Methode __clone() deklariert ist, so wird diese aufgerufen, damit weitere Aktionen durchgeführt werden können:

Hier wird das Objekt $erstesObjekt geklont. Würde in seiner Klasse keine Methode __clone() vorhanden sein, so würde nur eine flache Kopie angelegt werden. Die Anweisung in der Methode clone() sorgt jedoch dafür, dass auch ein Klon des referenzierten Objektes angelegt wird. Somit existieren bei der Ausführung der letzten Anweisung zwei referenzierte Objekte und nur bei einem wird die Variable $i auf 2 gesetzt. Bei einer flachen Kopie würde nur ein referenziertes Objekt existieren, welches nun auf 2 gesetzt werden würde und die ehemalige 1 verloren gehen würde.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen