這篇文章介紹的內容是關於【php類別與物件】物件複製,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
##物件複製
使用情境:
1.如果你有一個GTK 視窗對象,該物件持有視窗相關的資源。你可能會想複製一個新的窗口,保持所有屬性與原來的窗口相同,但必須是一個新的對象(因為如果不是新的對象,那麼一個窗口中的改變就會影響到另一個窗口)。 2.如果物件A 中保存著物件B 的引用,當你複製物件A 時,你想其中使用的物件不再是物件B 而是B 的一個副本,那麼你必須得到物件A的一個副本。實作: 透過 clone 關鍵字(如果可能,這將呼叫物件的 __clone() 方法),物件中的 __clone() 方法不能直接呼叫。
$copy_of_object = clone $object;當物件被複製後,PHP 5 會對物件的所有屬性執行一個淺複製(shallow copy)。所有的引用屬性 仍然會是一個指向原來的變數的引用。
void __clone ( void )當複製完成時,如果定義了__clone() 方法,則新建立的物件(複製產生的物件)中的__clone() 方法會被調用,可用於修改屬性的值(如果有必要的話)。
Example #1 复制一个对象<?phpclass 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);/* Original Object: MyCloneable Object ( [object1] => SubObject Object ( [instance] => 1 ) [object2] => SubObject Object ( [instance] => 2 ) ) */print("Cloned Object:\n"); print_r($obj2);/* Cloned Object: MyCloneable Object ( [object1] => SubObject Object ( [instance] => 3 ) [object2] => SubObject Object ( [instance] => 2 ) ) */?>相關建議:
以上是【php類別與物件】物件複製的詳細內容。更多資訊請關注PHP中文網其他相關文章!