PHP: Objektorientierte Programmierung

Klonen und Kopieren

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Während beim Kopieren nur auf das Original referenziert wird, erreichen Sie beim Klonen, dass ein völlig eigenständiges Objekt mit identischen Werten erzeugt wird.
06:22

Transkript

Falls Sie in PHP eine direkte Kopie eines Objekts brauchen, und dabei nicht nur den Verweis von einem Objekt zum andern, dann reicht das normale Kopieren nicht aus, dann müssen Sie etwas verwenden, was klonen heißt. Sehen wir uns aber erst einmal die Folgen des Kopierens an. Ich habe hier eine sehr übersichtliche Klasse, nämlich CloneTest, diese Klasse hat zwei Eigenschaften, und mit Hilfe einer Konstruktor-Methode werden beim Initialisieren diese zwei Werte befüllt. Und ich habe hier auch gleich Initialisiert, nämlich ich habe hier mein Objekt $original, und das Objekt $original hat jetzt die Werte "Ich bleibe erhalten" und einen "Kontrollwert" zugewiesen. Und wenn ich mir jetzt den Inhalt der Variablen $original ausgeben lasse, dann komme ich hier zu diesem oberen Wert. "ich bleibe erhalten" - "ich bleibe erhalten", alles gut. Dann erzeuge ich eine Kopie vom Original, das erfolgt ganz einfach mit dem Zuweisungsoperator, so wie wir das kennen, und wenn wir uns jetzt die Kopie ausgeben lassen, hat sie natürlich den selben Wert wie das Original. Ich kann aber jetzt den Wert der Kopie auch verändern. Ich kann also durchaus sagen, dass ich $kopie nehme, und bei der $kopie den Wert a neu setze, das heißt, ich sage, $kopie a = und jetzt nehme ich einen anderen Satz, nämlich "ein anderer Wert". Ich schließe das Ganze mit einem Strichpunkt ab, Strg+S zum Speichern, und wenn ich jetzt hier drüben meine Seite neu lade, dann sehen Sie, dass jetzt hier im zweiten Teil eben die Variable mit diesem neuen Wert befüllt wurde. Soweit ist ja noch alles ganz gut, das Problem wird dann offensichtlich, wenn ich mir jetzt im Nachhinein mit diesen veränderten Werten noch einmal das Original ausgeben lasse. Wenn ich jetzt sage, print_r und mir dabei mein Original ausgeben lasse, dann muss ich mit Schaudern bemerken, nachdem ich es gespeichert habe, und mir neu laden ließ, dass jetzt auch in meinem Original dieser neue Wert zum Tragen kommt. Und das ist eben das Problem, oder manchmal auch der gewünschte Effekt beim Kopieren, dass ich nämlich referenziere. Ich übernehme nur eine Referenz hin zum anderen Objekt, und wenn sich an der einen Seite was verändert, verändert sich's eben an der anderen auch. Und deswegen gibt es die Möglichkeit, mit Klonen zu arbeiten, das heißt, ich werde jetzt hier das Original klonen. Ich kann also sagen, $c = dann brauche ich das Schlüsselwort clone von $original. Und wenn ich mir hier jetzt dann - mit Hilfe von print_r $c ausgeben lasse, es speichere und hier die Seite neu lade, dann habe ich jetzt in $c nach wie vor den ursprünglichen Wert drin stehen, denn was jetzt beim Klonen anders läuft als beim Kopieren, ist das, dass beim Klonen auch die Werte mit übernommen werden. Somit ist dieses Objekt c ein völlig eigenständiges Ding, das unabhängig von irgendwelchen Kopiervorgängen oder Veränderungen den ursprünglichen Wert erhält. Es gibt auch eine magische Methode Clone, und mit der magischen Methode Clone erreiche ich etwas ähnliches, damit erreiche ich nämlich, dass ich schon in der Ursprungsklasse dank dieser Methode, wenn Clone zum Einsatz kommt, einen Wert zuweisen kann. Das heißt, ich bin hier oben in meiner Klasse CloneTest, und werde hier jetzt eine neue public function verwenden, und zwar meine clone(), und die wird nicht sehr viel können, das Einzige, was sie eben macht, ist, dass sie dem Wert a etwas Neues zuweist, nämlich "etwas Neues". So, ich habe jetzt also direkt in der Klasse mit Hilfe der magischen Methode clone dem Wert a etwas Neues zugewiesen, und was ich damit erreiche, nachdem ich es gespeichert habe und mir neu aufrufen lasse, da sehen Sie, dass jetzt nur mein geclonter Wert mit diesem "etwas Neues" aus der Methode befüllt wird, und weder die Kopie noch das Original, wie es ausgegeben wird, sind davon betroffen. Wenn Sie das Klonen einsetzen, so erschaffen Sie damit ein völlig eigenständiges Objekt. Das, was ich Ihnen jetzt zeigen wollte, ist eigentlich nur das, dass Sie darauf achten müssen, was Sie wollen, wenn Sie ein Objekt kopieren. Wollen Sie einfach nur referenzieren? Mit der Gefahr, dass die Werte sich angleichen? Oder wollen Sie etwas völlig Getrenntes erzeugen, dann müssen Sie das Klonen verwenden, in welcher Form auch immer, um damit eben stabile Werte zu kopieren und auch wieder ausgegeben zu bekommen.

PHP: Objektorientierte Programmierung

Lernen Sie alle Aspekte kennen, die bei der Umsetzung des OOP-Programmierstils in PHP eine Rolle spielen.

2 Std. 32 min (34 Videos)
Derzeit sind keine Feedbacks vorhanden...
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:23.09.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!