क्लोन का उपयोग करने का कारण यह है कि ऑब्जेक्ट के साथ काम करते समय PHP हमेशा एक संदर्भ के रूप में ऑब्जेक्ट देता है, प्रतिलिपि के रूप में नहीं।
है यही कारण है कि जब एक समारोह के लिए वस्तु गुजर आप & (संदर्भ) के साथ यह निर्दिष्ट करने की आवश्यकता नहीं है:
function doSomethingWithObject(MyObject $object) { // it is same as MyObject &object
...
}
तो आदेश वस्तु प्राप्त करने के लिए कॉपी आप क्लोन कीवर्ड उपयोग करने के लिए यह वह जगह है कैसे वस्तुओं पर एक उदाहरण php द्वारा नियंत्रित किया जाता है और क्या क्लोन करता है:
class Obj {
public $obj;
public function __construct() {
$this->obj = new stdClass();
$this->obj->prop = 1; // set a public property
}
function getObj(){
return $this->obj; // it returns a reference
}
}
$obj = new Obj();
$a = $obj->obj; // get as public property (it is reference)
$b = $obj->getObj(); // get as return of method (it is also a reference)
$b->prop = 7;
var_dump($a === $b); // (boolean) true
var_dump($a->prop, $b->prop, $obj->obj->prop); // int(7), int(7), int(7)
// changing $b->prop didn't actually change other two object, since both $a and $b are just references to $obj->obj
$c = clone $a;
$c->prop = -3;
var_dump($a === $c); // (boolean) false
var_dump($a->prop, $c->prop, $obj->obj->prop); // int(7), int(-3), int(7)
// since $c is completely new copy of object $obj->obj and not a reference to it, changing prop value in $c does not affect $a, $b nor $obj->obj!
स्रोत
2012-08-30 11:12:24
[प्रोटोटाइप डिजाइन पैटर्न] (http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/रेफरी = sr_1_1) भी एक अच्छा उपयोग मामला है। – pce