Dado un objeto DateTime y la tarea es crear una copia de ese objeto. Para crear una copia del objeto DateTime usamos la palabra clave clon que se describe a continuación:
Se crea una copia del objeto DateTime usando la palabra clave clon (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:
$DateTime_copy_object_name = clone $DateTime_object_to_be_copied
Los siguientes ejemplos ilustran la clonación del objeto DateTime en PHP:
Ejemplo 1:
PHP
<?php // Program to create copy of DateTime object // Creating object $obj = new DateTime(); // Creating clone or copy of object $copy = clone $obj; // Printing initial values echo "Printing initial values\n"; $result = $obj->format('Y-m-d H:i:s'); echo "Original object: $result\n"; $result = $copy->format('Y-m-d H:i:s'); echo "Cloned object: $result\n\n"; // Changing original object ($obj) value // to verify other($copy) is clone or not // This statement will add 3 Days $obj->add(new DateInterval('P3D')); // Printing values echo "Printing values after change\n"; $result = $obj->format('Y-m-d H:i:s'); echo "Original object: $result\n"; $result = $copy->format('Y-m-d H:i:s'); echo "Cloned object: $result\n"; ?>
Producción:
Printing initial values Original object: 2020-04-14 17:14:18 Cloned object: 2020-04-14 17:14:18 Printing values after change Original object: 2020-04-17 17:14:18 Cloned object: 2020-04-14 17:14:18
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 DateTime object // Creating object $obj = new DateTime(); // Creating clone or copy of object $copy = clone $obj; $ref_obj = $obj; // Printing initial values echo "Printing initial values\n"; $result = $obj->format('Y-m-d H:i:s'); echo "Original object: $result\n"; $result = $ref_obj->format('Y-m-d H:i:s'); echo "Reference object: $result\n"; $result = $copy->format('Y-m-d H:i:s'); echo "Cloned object: $result\n\n"; // Changing original object ($obj) value // to verify other($copy) is clone or not // This statement will add 3 Months $obj->add(new DateInterval('P3M')); // Printing values echo "Printing values after change\n"; $result = $obj->format('Y-m-d H:i:s'); echo "Original object: $result\n"; $result = $ref_obj->format('Y-m-d H:i:s'); echo "Reference object: $result\n"; $result = $copy->format('Y-m-d H:i:s'); echo "Cloned object: $result\n"; ?>
Producción:
Printing initial values Original object: 2020-04-14 17:14:49 Reference object: 2020-04-14 17:14:49 Cloned object: 2020-04-14 17:14:49 Printing values after change Original object: 2020-07-14 17:14:49 Reference object: 2020-07-14 17:14:49 Cloned object: 2020-04-14 17:14:49
Entonces, para hacer una copia del objeto que usamos clonar, no use el operador (=) ya que crea una referencia.