کلاس‌‌ها و اشیا (PHP 5)
PHP Manual

کپی شی

ساخت یک کپی از یک شی بصورت همانندسازی کامل ویژگی‌ها همیشه مطلوب نیست. یک نمونه خوب برای این نیاز برای کپی نمودن سازنده‌هاست اگر یک شی نمایش‌ٰدهنده یک پنجره GTK و شی حامل منابع این پنجره وجود داشته باشد وقتی بخواهید یک کپی از آن بسازید و پنجره جدیدی بسازید و منابع جدیدی در اختیار آن باشد. نمونه دیگر برای این مساله شی شما دارای مرجعی برای شی دیگری است که شما می‌خواهید شی دیگری برای آن کپی نمایید و می‌خواهید مرجع شی به کپی مخصوص خود اشاره نماید.

یک شی کپی با استفاده از کلمه کلیدی clone ممکن است (که متد __clone() شی را در صورت ممکن فراخوانی نمایید). متد __clone() یک شی نمی‌تواند مستقیما فراخوانی گردد.

$copy_of_object = clone $object;

زمانی که یک شی کپی می‌گردد PHP 5 یک کپی کم‌عمق از تمام مشخصات شی خواهد ساخت. هر ویژگی دارای ارجاع به دیگر متغیرها همان مرجع‌ها باقی خواهد ماند. اگر یک متد__clone() تعریف شده باشد آنگاه متد __clone() شی ساخته شده جدید فراخوانی خواهد گردید تا به ویژگی‌های مورد نیاز برای تغییر دسترسی داشته باشیم.

وقتی کپی کامل شد اگر متد __clone() تعریف شده باشد متد __clone() شی ساخته شده جدید فراخوانی خواهد شد تا ویژگی‌های مورد نیاز تغییر داده شود.

Example #1 کپی نمودن یک شی

<?php
class SubObject
{
    static 
$instances 0;
    public 
$instance;

    public function 
__construct() {
        
$this->instance = ++self::$instances;
    }

    public function 
__clone() {
        
$this->instance = ++self::$instances;
    }
}

class 
MyCloneable
{
    public 
$object1;
    public 
$object2;

    function 
__clone()
    {
        
// Force a copy of this->object, otherwise
        // it will point to same object.
        
$this->object1 = clone $this->object1;
    }
}

$obj = new MyCloneable();

$obj->object1 = new SubObject();
$obj->object2 = new SubObject();

$obj2 = clone $obj;


print(
"Original Object:\n");
print_r($obj);

print(
"Cloned Object:\n");
print_r($obj2);

?>

The above example will output:

Original Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 1
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)
Cloned Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 3
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)

کلاس‌‌ها و اشیا (PHP 5)
PHP Manual