Objekte klonen

Eine Kopie eines Objektes mit vollständig replizierten Eigenschaften zu erzeugen, ist nicht immer das gewünschte Verhalten. Ein gutes Beispiel für die Notwendigkeit von Kopierkonstruktoren ist ein Objekt, welches ein GTK Fenster repräsentiert und dieses Objekt enthält die Ressource des GTK-Fensters. Wenn Sie ein Duplikat dieses Objektes erzeugen, könnten Sie ein neues Fenster mit gleichen Eigenschaften erzeugen wollen und das neue Objekt soll die Ressource des neuen Fensters speichern. Ein weiteres Beispiel ist ein Objekt, welches eine Referenz auf ein anderes Objekt, das es benutzt, hält und wenn das Vaterobjekt repliziert wird, will man eine neue Instanz dieses anderen Objektes erzeugen, damit das Replikat eine eigene Kopie besitzt.

Eine Objektkopie wird durch die Nutzung des clone Schlüsselwortes (welches wenn möglich die __clone()-Methode des Objektes aufruft) erzeugt.

$kopie_des_objektes = clone $objekt;

Wenn ein Objekt geklont wird, wird PHP eine seichte Kopie der Eigenschaften des Objektes durchführen. Alle Eigenschaften, die Referenzen auf andere Variablen sind, werden Referenzen bleiben.

__clone(): void

Sobald der Klonvorgang abgeschlossen und eine __clone()- Methode definiert ist, so wird die __clone()-Methode des neu erzeugten Objekts aufgerufen, damit alle notwendigen Eigenschaften verändert werden können.

Beispiel #1 Ein Objekt klonen

<?php
class SubObject
{
    static 
$instanzen 0;
    public 
$instanz;

    public function 
__construct() {
        
$this->instanz = ++self::$instanzen;
    }

    public function 
__clone() {
        
$this->instanz = ++self::$instanzen;
    }
}

class 
MyCloneable
{
    public 
$objekt1;
    public 
$objekt2;

    function 
__clone()
    {
        
// Erzwinge eine Kopie von this->object,
        // andernfalls wird es auf das selbe Objekt zeigen
        
$this->objekt1 = clone $this->objekt1;
    }
}

$obj = new MyCloneable();

$obj->objekt1 = new SubObject();
$obj->objekt2 = new SubObject();

$obj2 = clone $obj;


print(
"Original Objekt:\n");
print_r($obj);

print(
"geklontes Objekt:\n");
print_r($obj2);

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Original Objekt:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instanz] => 1
        )

    [object2] => SubObject Object
        (
            [instanz] => 2
        )

)
geklontes Object:
MyCloneable Object
(
    [objekt1] => SubObject Object
        (
            [instanz] => 3
        )

    [objekt2] => SubObject Object
        (
            [instanz] => 2
        )

)

Es ist möglich, auf die Klassenelemente eines soeben geklonten Objekts in einem einzigen Ausdruck zuzugreifen:

Beispiel #2 Zugriff auf ein Element eines soeben geklonten Objekts

<?php
$dateTime 
= new DateTime();
echo (clone 
$dateTime)->format('Y');
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

2016

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

Grundlagen von Views in MySQL

Views in einer MySQL-Datenbank bieten die Möglichkeit, eine virtuelle Tabelle basierend auf dem Ergebnis einer SQL-Abfrage zu erstellen. ...

admin

Autor : admin
Kategorie: mySQL-Tutorials

Definition von Stored Procedures - eine Einführung

Stored Procedures sind vordefinierte SQL-Codeblöcke, die in einer Datenbank gespeichert sind und bei Bedarf aufgerufen werden können. ...

Bernie

Autor : ebiz-consult GmbH & Co. KG
Kategorie: mySQL-Tutorials

Wie kann man komplexe Abfragen mit SQL-Querys In MySQLi effektiv durchführen?

In diesem MySQL-Tutorial wird erklärt, wie komplexe SQL-Abfragen in MySQLi effizient durchgeführt werden können. Wir werden uns mit verschiedenen Aspekten der Datenbankabfrage beschäftigen und spezifische Methoden kennenlernen. ...

TheMax

Autor : TheMax
Kategorie: mySQL-Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

Professioneller Webentwickler & Webdesigner

Of course, here is the translation: Hello, Thank you for your interest in the long-term project. Your extensive skills and experience in web dev ...

Geschrieben von Athelstan am 15.04.2024 09:25:39
Forum: Jobgesuche
Wir stellen unsere SEO-Agentur vor

Hallo In der heutigen digitalen Welt war es für Unternehmen noch nie so einfach, ihre Reichweite weltweit zu vergrößern. Wenn Sie außerhalb I ...

Geschrieben von thomasmuller am 14.04.2024 07:18:33
Forum: User stellen sich vor
Spielplan für 4 Gruppen zu je 6 Teams auf 2 Feldern

Hallöchen zusammen, ich versuche derzeit unseren Excel-Spielplan in PHP zu überführen. Eigentlich bin ich auch shon fertig - wenn da nicht dies ...

Geschrieben von derH0st am 11.04.2024 15:58:37
Forum: PHP Developer Forum
PHP 8.3.3 - App kann auf dem PC nicht ausgeführt werden

Problem gelöst. Die php.exe hatte einen defekt. Neue heruntergeladen und fertig.

Geschrieben von Tetra1081 am 10.04.2024 16:49:14
Forum: PHP Developer Forum