How to create a copy of an object in PHP?

An object copy 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:

$copy_object_name = clone $object_to_be_copied

Program 1: Program to create copy of an object.



filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

GeeksforGeeks
Computer science portal

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

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

GeeksforGeeks
Python for Machine learning
GeeksforGeeks

Note: It is clear that cloned object have different values than original object but original and refrenced object created by using ‘=’ operator have same value.

References:https://www.php.net/manual/en/language.oop5.cloning.php



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.