类与对象(PHP5)之十二:对象克隆(Object cloning)

日期:2006-09-26  作者:喜腾小二  来源:PHPChina


通过完全地复制属性创建一个对象的拷贝不是通常想要的行为。需求的一个好的实例适合于拷贝构造函数,
如果有一个对象描述一个GTK窗口和对象保存这个GTK窗口的资源,当你创建一个副本,你或许想创建一个相同的属性新窗口使用和保存新对象资源的新窗口。另一个例子是当你复制父对象时如果保存一个引用给另一个对象,你想创建其他类的一个新实例来分开拷贝所属的复制品。一个对象的拷贝是使用clone关键字来创建的(如果可能的话可以调用对象的__clone()方法),一个对象的__clone()方法不能被直接声明。
PHP代码如下:

$copy_of_object clone $object


当一个对象被克隆时,PHP5将执行一个所有对象的属性的浅拷贝。任何对其它变量引用的属性将只保留引用。如果一个__clone()方法被定义,然后重新创建一个对象的克隆方法来允许任何必需的属性当它需要被改变时调用。
例子
19-30. 克隆一个对象
PHP代码如下:

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->object1=clone($this->object1);//Force a copy of this->object,otherwise it will point to same object.
    
}
}
$obj = new MyCloneable();
$obj->object1 = new SubObject();
$obj->object2 = new SubObject();
$obj2 clone $obj;
print(
"Original Object:
"
);
print_r($obj);
print(
"Cloned Object:
"
);
print_r($obj2);
?> 


上例将输出:

[Copy to clipboard]CODE:
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
    
   )
)


<<<返回技术中心

技术文章

站内新闻

我要啦免费统计