পরিচয়
সাধারণ অ্যাসাইনমেন্টের মাধ্যমে একটি বস্তুর অনুলিপি তৈরি করা শুধুমাত্র মেমরিতে থাকা আরেকটি রেফারেন্স তৈরি করে। সুতরাং, বৈশিষ্ট্যের পরিবর্তনগুলি আসল এবং নকল উভয় বস্তুতে প্রতিফলিত হয়। PHP এর ক্লোন আছে কীওয়ার্ড যা বস্তুর একটি অগভীর অনুলিপি তৈরি করে। যাইহোক, যদি মূল বস্তুর বৈশিষ্ট্যগুলির মধ্যে একটি হিসাবে অন্য এম্বেড করা বস্তু থাকে, অনুলিপি করা বস্তুটি এখনও একই নির্দেশ করে। বস্তুর একটি eep কপি তৈরি করতে, ম্যাজিক পদ্ধতি __clone() ক্লাসে সংজ্ঞায়িত করা প্রয়োজন/
অ্যাসাইনমেন্ট দ্বারা অনুলিপি করুন
নিম্নলিখিত কোডে, অ্যাড্রেস ক্লাসের অবজেক্ট হিসাবে মাইক্লাসের একটি বৈশিষ্ট্য রয়েছে। মাইক্লাসের একটি বস্তু অ্যাসাইনমেন্ট দ্বারা সদৃশ হয়। এর সম্পত্তির মান পরিবর্তন উভয় বস্তুতেই প্রতিফলিত হয়
উদাহরণ
<?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 ) )
__clone() পদ্ধতি ব্যবহার করে
__clone() মেথড এম্বেডেড অবজেক্টের একাও তৈরি করে একটি গভীর কপি তৈরি করে
উদাহরণ
<?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 ) )