परिचय
साधारण असाइनमेंट द्वारा किसी ऑब्जेक्ट की प्रतिलिपि बनाना केवल स्मृति में एक के लिए एक और संदर्भ बनाता है। इसलिए, विशेषता में परिवर्तन मूल और डुप्लिकेट ऑब्जेक्ट दोनों में प्रतिबिंबित होते हैं। PHP में क्लोन है कीवर्ड जो ऑब्जेक्ट की उथली प्रतिलिपि बनाता है। हालाँकि, यदि मूल वस्तु में इसके गुणों में से एक के रूप में अन्य एम्बेडेड वस्तु है, तो कॉपी की गई वस्तु अभी भी उसी को संदर्भित करती है। ऑब्जेक्ट की एक ईप कॉपी बनाने के लिए, जादुई विधि __clone() कक्षा में परिभाषित करने की आवश्यकता है/
असाइनमेंट द्वारा कॉपी करें
निम्नलिखित कोड में, myclass में एड्रेस क्लास के ऑब्जेक्ट के रूप में एक विशेषता है। Myclass का एक ऑब्जेक्ट असाइनमेंट द्वारा डुप्लिकेट किया गया है। इसकी संपत्ति के मूल्य में परिवर्तन दोनों वस्तुओं में परिलक्षित होता है
उदाहरण
<?php class address{ var $city="Nanded"; var $pin="431601"; function setaddr($arg1, $arg2){ $this->city=$arg1; $this->pin=$arg2; } } class myclass{ var $name="Raja"; var $obj; function setname($arg){ $this->name=$arg; } } $obj1=new myclass(); $obj1->obj=new address(); echo "original object\n"; print_r($obj1); $obj2=$obj1; $obj1->setname("Ravi"); echo "after change:\n"; print_r($obj1); print_r($obj2); ?>
आउटपुट
यह कोड निम्न आउटपुट दिखाता है
original object myclass Object( [name] => Raja [obj] => address Object( [city] => Nanded [pin] => 431601 ) ) after change: original object myclass Object( [name] => Ravi [obj] => address Object( [city] => Nanded [pin] => 431601 ) ) copied object myclass Object( [name] => Ravi [obj] => address Object( [city] => Nanded [pin] => 431601 ) )
क्लोन कीवर्ड का उपयोग करना
क्लोन कीवर्ड एक उथली प्रतिलिपि बनाता है। संपत्ति के मूल्य में परिवर्तन क्लोन की गई वस्तु में प्रतिबिंबित नहीं होता है। हालाँकि, यदि एम्बेडेड ऑब्जेक्ट को संशोधित किया जाता है, तो परिवर्तन मूल और क्लोन किए गए ऑब्जेक्ट में दिखाई देते हैं
उदाहरण
<?php class address{ var $city="Nanded"; var $pin="431601"; function setaddr($arg1, $arg2){ $this->city=$arg1; $this->pin=$arg2; } } class myclass{ var $name="Raja"; var $obj; function setname($arg){ $this->name=$arg; } } $obj1=new myclass(); $obj1->obj=new address(); echo "original object:\n"; print_r($obj1); $obj2=clone $obj1; $obj1->setname("Ravi"); $obj1->obj->setaddr("Mumbai", "400001"); echo "after change:\n"; echo "original object:\n"; print_r($obj1); echo "cloned object:\n"; print_r($obj2); ?>
आउटपुट
आउटपुट निम्न परिणाम दिखाता है
original object: myclass Object( [name] => Raja [obj] => address Object( [city] => Nanded [pin] => 431601 ) ) after change: original object: myclass Object( [name] => Ravi [obj] => address Object( [city] => Mumbai [pin] => 400001 ) ) cloned object: myclass Object( [name] => Raja [obj] => address Object( [city] => Mumbai [pin] => 400001 ) )
__क्लोन() विधि का उपयोग करना
__क्लोन () विधि एम्बेडेड ऑब्जेक्ट का अकेला भी बनाकर एक गहरी प्रतिलिपि बनाता है
उदाहरण
<?php class address{ var $city="Nanded"; var $pin="431601"; function setaddr($arg1, $arg2){ $this->city=$arg1; $this->pin=$arg2; } } class myclass{ var $name="Raja"; var $obj; function setname($arg){ $this->name=$arg; } public function __clone() { $this->obj = clone $this->obj ; } } $obj1=new myclass(); $obj1->obj=new address(); echo "original object:\n"; print_r($obj1); $obj2=clone $obj1; $obj1->setname("Ravi"); $obj1->obj->setaddr("Mumbai", "400001"); echo "after change:\n"; echo "original object:\n"; print_r($obj1); echo "cloned object:\n"; print_r($obj2); ?>
आउटपुट
आउटपुट निम्न परिणाम दिखाता है
original object: myclass Object( [name] => Raja [obj] => address Object( [city] => Nanded [pin] => 431601 ) ) after change: original object: myclass Object( [name] => Ravi [obj] => address Object( [city] => Mumbai [pin] => 400001 ) ) cloned object: myclass Object( [name] => Raja [obj] => address Object( [city] => Nanded [pin] => 431601 ) )