锟斤拷锟斤拷锟斤拷

锟节讹拷锟斤拷锟斤拷锟斤拷拢锟斤拷锟斤拷遣锟斤拷锟斤拷锟揭拷锟饺拷锟斤拷锟揭伙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟皆★拷锟斤拷锟斤拷一锟斤拷锟斤拷锟斤拷锟饺肥碉拷锟揭拷锟斤拷锟斤拷锟斤拷锟斤拷一锟斤拷 GTK 锟斤拷锟节讹拷锟襟,该讹拷锟斤拷锟斤拷写锟斤拷锟斤拷锟截碉拷锟斤拷源锟斤拷锟斤拷锟斤拷芑锟斤拷敫达拷锟揭伙拷锟斤拷碌拇锟斤拷冢锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟皆拷锟斤拷拇锟斤拷锟斤拷锟酵拷锟斤拷锟斤拷锟斤拷锟斤拷锟揭伙拷锟斤拷碌亩锟斤拷锟斤拷锟轿拷锟斤拷锟斤拷锟斤拷锟铰的讹拷锟斤拷锟斤拷么一锟斤拷锟斤拷锟斤拷锟叫的改憋拷突锟接帮拷斓斤拷锟揭伙拷锟斤拷锟斤拷冢锟斤拷锟斤拷锟斤拷锟揭伙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟� A 锟叫憋拷锟斤拷锟脚讹拷锟斤拷 B 锟斤拷锟斤拷锟矫o拷锟斤拷锟姐复锟狡讹拷锟斤拷 A 时锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷使锟矫的讹拷锟斤拷锟斤拷锟角讹拷锟斤拷 B 锟斤拷锟斤拷 B 锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷么锟斤拷锟斤拷锟矫碉拷锟斤拷锟斤拷 A 锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷

锟斤拷锟斤拷锟狡匡拷锟斤拷通锟斤拷 clone 锟截硷拷锟斤拷锟斤拷锟斤拷桑锟斤拷锟斤拷锟斤拷锟杰o拷锟解将锟斤拷锟矫讹拷锟斤拷锟� __clone() 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟叫碉拷 __clone() 锟斤拷锟斤拷锟斤拷锟杰憋拷直锟接碉拷锟矫★拷

$copy_of_object = clone $object;

锟斤拷锟斤拷锟襟被革拷锟狡猴拷PHP 5 锟斤拷远锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷执锟斤拷一锟斤拷浅锟斤拷锟狡o拷shallow copy锟斤拷锟斤拷锟斤拷锟叫碉拷锟斤拷锟斤拷锟斤拷锟斤拷 锟斤拷然锟斤拷锟斤拷一锟斤拷指锟斤拷原锟斤拷锟侥憋拷锟斤拷锟斤拷锟斤拷锟矫★拷

__clone ( void ) : void

锟斤拷锟斤拷锟斤拷锟斤拷锟绞憋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 __clone() 锟斤拷锟斤拷锟斤拷锟斤拷锟铰达拷锟斤拷锟侥讹拷锟襟(革拷锟斤拷锟斤拷锟缴的讹拷锟斤拷锟叫碉拷 __clone() 锟斤拷锟斤拷锟结被锟斤拷锟矫o拷锟斤拷锟斤拷锟斤拷锟睫革拷锟斤拷锟皆碉拷值锟斤拷锟斤拷锟斤拷斜锟揭拷幕锟斤拷锟斤拷锟�

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()
    {
      
        
// 强锟狡革拷锟斤拷一锟斤拷this->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);

?>

锟斤拷锟斤拷锟斤拷锟教伙拷锟斤拷锟斤拷锟�

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
        )

)