Wednesday, November 20, 2024
Google search engine
HomeLanguagesHow to copy a DateTime object in PHP ?

How to copy a DateTime object in PHP ?

Given a DateTime object and the task is to create a copy of that object. To create a copy of DateTime object we use clone keyword which is described below:
A copy of DateTime object is created by using the clone keyword (which calls the object’s __clone() method if possible). An object’s __clone() method cannot be called directly. When an object is cloned, PHP will perform a shallow copy of all of the object’s properties. Any properties that are references to other variables will remain references.

Syntax: 

$DateTime_copy_object_name = clone $DateTime_object_to_be_copied

Below examples illustrate the cloning of DateTime object in PHP:

Example 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";
?>


Output: 

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

Example 2: Below program distinguishes clone from assignment ( = ) operator. 

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


Output: 

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

So, to make a copy of the object we use clone, don’t use (=) operator as it creates a reference.
 

RELATED ARTICLES

Most Popular

Recent Comments