類與物件(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
    
   )
)


<<<返回技術中心

技術文章

站內新聞

我要啦免费统计