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.
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" ; ?> |
neveropen Computer science portal
Example 2: Below program distinguishes clone from assignment ( = ) operator.
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" ; ?> |
neveropen Python for Machine learning neveropen
Note: It is clear that cloned object have different values than original object but original and referenced object created by using ‘=’ operator have same value.
References:https://www.php.net/manual/en/language.oop5.cloning.php