首頁  >  文章  >  後端開發  >  php中的clone方法有什麼作用

php中的clone方法有什麼作用

藏色散人
藏色散人原創
2020-09-02 10:38:332975瀏覽

php中的clone方法的作用:用於物件複製。物件複製透過clone關鍵字來完成,如【$copy_of_object = clone $object;】。物件中的__clone()方法不能直接呼叫。

php中的clone方法有什麼作用

php clone方法用於物件複製 

推薦:《php影片教學

在多數情況下,我們並不需要完全複製一個物件來獲得其中屬性。但有一個情況下確實需要:如果你有一個 GTK 視窗對象,該對象持有視窗相關的資源。你可能會想複製一個新的窗口,保持所有屬性與原來的窗口相同,但必須是一個新的對象(因為如果不是新的對象,那麼一個窗口中的改變就會影響到另一個窗口)。

還有一種情況:如果物件A 中保存著物件B 的引用,當你複製物件A 時,你想其中使用的物件不再是物件B 而是B 的副本,那麼你必須得到物件A 的一個副本。

物件複製可以透過 clone 關鍵字來完成(如果可能,這將呼叫物件的 __clone() 方法)。物件中的 __clone() 方法不能直接呼叫。

$copy_of_object = clone $object;

當物件被複製後,PHP 5 會對物件的所有屬性執行一個淺複製(shallow copy)。所有的引用屬性 仍然會是一個指向原來的變數的引用。

__clone ( void ) : void

當複製完成時,如果定義了__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()
    {
      
        // 强制复制一份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
        )
)

以上是php中的clone方法有什麼作用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn