PHP में ऑब्जेक्ट कॉपी करना
PHP में, ऑब्जेक्ट्स डिफ़ॉल्ट रूप से **रेफरेंस द्वारा असाइन** किए जाते हैं। एक स्वतंत्र कॉपी बनाने के लिए, **clone** कीवर्ड का उपयोग करें।
उदाहरण 1: बेसिक क्लोनिंग
<?php
class Demo {
public $val1;
public $val2;
}
$ob = new Demo();
$copyOb = clone $ob; // शैलो कॉपी बनाता है
$ob->val1 = "Jack";
$ob->val2 = "Kevin";
$copyOb->val1 = "Tom";
$copyOb->val2 = "Ryan";
echo $ob->val1 . $ob->val2 . "\n"; // JackKevin
echo $copyOb->val1 . $copyOb->val2 . "\n"; // TomRyan
?>
आउटपुट
JackKevin TomRyan
उदाहरण 2: कंस्ट्रक्टर के साथ
<?php
class Demo {
public $deptname;
public $deptzone;
public function __construct($a, $b) {
$this->deptname = $a;
$this->deptzone = $b;
}
}
$val = new Demo('Finance', 'West');
$copy = clone $val;
print_r($val);
print_r($copy);
?>
आउटपुट
Demo Object
(
[deptname] => Finance
[deptzone] => West
)
Demo Object
(
[deptname] => Finance
[deptzone] => West
)
महत्वपूर्ण: शैलो vs डीप क्लोनिंग
- शैलो क्लोन (डिफ़ॉल्ट): स्केलर प्रॉपर्टीज़ कॉपी की जाती हैं, लेकिन **ऑब्जेक्ट प्रॉपर्टीज़ साझा** रहती हैं (समान इंस्टेंस को इंगित करती हैं)।
- डीप क्लोन:
__clone()मैजिक मेथड लागू करें ताकि नेस्टेड ऑब्जेक्ट्स को क्लोन किया जा सके।
डीप क्लोन उदाहरण
<?php
class Address {
public $city;
public function __construct($city) { $this->city = $city; }
}
class Person {
public $name;
public $address;
public function __construct($name, Address $address) {
$this->name = $name;
$this->address = $address;
}
// डीप क्लोन के लिए __clone लागू करें
public function __clone() {
$this->address = clone $this->address;
}
}
$addr = new Address("Delhi");
$p1 = new Person("Amit", $addr);
$p2 = clone $p1; // डीप क्लोन __clone() के कारण
$p2->address->city = "Mumbai";
echo $p1->address->city; // Delhi (अप्रभावित)
echo $p2->address->city; // Mumbai
?>