¿Cómo copiar un objeto DateTime en PHP?

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.
 

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 *