Se crea una copia de objeto usando la palabra clave clone (que llama al método __clone() del objeto si es posible). El método __clone() de un objeto no se puede llamar directamente. Cuando se clona un objeto, PHP realizará una copia superficial de todas las propiedades del objeto. Todas las propiedades que sean referencias a otras variables seguirán siendo referencias.
Sintaxis:
$copy_object_name = clone $object_to_be_copied
Programa 1: Programa para crear una copia de un objeto.
php
<?php // Program to create copy of an object // Creating class class GFG { public $data1; public $data2; public $data3; } // Creating object $obj = new GFG(); // Creating clone or copy of object $copy = clone $obj; // Set values of $obj object $obj->data1 = "Geeks"; $obj->data2 = "for"; $obj->data3 = "Geeks"; // Set values of copied object $copy->data1 = "Computer "; $copy->data2 = "science "; $copy->data3 = "portal"; // Print values of $obj object echo "$obj->data1$obj->data2$obj->data3\n"; // Print values of $copy object echo "$copy->data1$copy->data2$copy->data3\n"; ?>
GeeksforGeeks Computer science portal
Ejemplo 2: el programa a continuación distingue el operador de clonación del operador de asignación ( = ).
php
<?php // Program to create copy of an object // Creating class class GFG { public $data1; public $data2; public $data3; } // Creating object $obj = new GFG(); // Creating clone or copy of object $copy = clone $obj; // Creating object without clone keyword $obj_ref = $obj; // Set values of $obj object $obj->data1 = "Geeks"; $obj->data2 = "for"; $obj->data3 = "Geeks"; // Set values of copied object $copy->data1 = "Python "; $copy->data2 = "for "; $copy->data3 = "Machine learning"; // Print values of $obj object echo "$obj->data1$obj->data2$obj->data3\n"; // Print values of $copy object echo "$copy->data1$copy->data2$copy->data3\n"; // Print values of without clone object echo "$obj_ref->data1$obj_ref->data2$obj_ref->data3\n"; ?>
GeeksforGeeks Python for Machine learning GeeksforGeeks
Nota: Está claro que el objeto clonado tiene valores diferentes que el objeto original, pero el objeto original y el referenciado creados con el operador ‘=’ tienen el mismo valor.
Referencias: https://www.php.net/manual/en/language.oop5.cloning.php