¿Cómo crear una copia de un objeto en PHP?

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";
 
?>
Producció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";
 
?>
Producció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

Publicación traducida automáticamente

Artículo escrito por Rajnis09 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *