Can someone explain me
-
what is Object Cloning in php?
-
When should i use clone keyword in php?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Object cloning is the act of making a copy of an object. As Cody pointed out, cloning in PHP is done by making a shallow copy of the object. This means that internal objects of the cloned object will not be cloned, unless you explicitly instruct the object to clone these internal objects too, by defining the magic method
__clone().If you don’t utilize the
__clonemethod, the internal objects of the new object will be references to the same objecs in memory as the internal objects of the original object that was cloned.Consider these examples:
Use cases for cloning would for instance be a case where you don’t want outside objects to mess with the internal state of an object.
Let’s say you have a class User with a internal object Address.
For arguments sake, let’s say you don’t want outside objects to mess with the internal Address of User objects, but you do want to be able to give them a copy of the Address object. The above example illustrates this. The
getAddressmethod returns a clone of the address object to calling objects. This means that if the calling object alters the Address object, the internal Address of User will not change. If you didn’t give a clone, then the outside object would be able to alter the internal Address of User, because a reference is given by default, not a clone.Hope this all makes some sense.
PS.:
Be aware though, that if Address would also have internal objects, you would have to make sure Address makes a deep copy of itself on cloning (as per my second example of this post) by defining
__clone()in Address. Otherwise you will get headaches of trying to figure out why your data is screwed.