首頁  >  文章  >  後端開發  >  PHP中clone關鍵字和__clone()方法的使用(實例詳解)

PHP中clone關鍵字和__clone()方法的使用(實例詳解)

WBOY
WBOY原創
2021-10-25 16:33:573194瀏覽

在先前的文章中為大家帶來了《PHP中的命名空間定義與使用(實例詳解)》,其中詳細的介紹了PHP中的命名空間的定義與使用,本篇繼續給大家看一看PHP中的相關知識,關於clone關鍵字的使用。希望對大家有幫助!

PHP中clone關鍵字和__clone()方法的使用(實例詳解)

在我們之前的學習中,有很多的關鍵字,像是$this$new之類的,今天我們繼續來看在PHP中也算是比較常用到的關鍵字clone複製關鍵字。在學習複製關鍵字之前,我們需要知道PHP中的物件模型是透過引用來呼叫物件的,但是又是偶需要建議一個物件的副本,目的就是想再原有物件改變的時候能夠不影響物件副本。

這時候如果使用new關鍵字是可以重新建立對象,然後再給屬性賦上相同的值,也是可以起到新建副本的作用,但是這種方法不僅麻煩而且容易出錯,這時候就希望PHP能有一個完全一樣的對象,而且這兩個還不是互相干擾的,也就是我們想的克隆。那應該怎樣去實現呢?不慌,接著看。

<strong><span style="font-size: 20px;">clone</span></strong>#關鍵字

我們希望有一個能夠和原本物件互不干擾的副本,在PHP中透過clone關鍵字就可以實現克隆物件了。

clone關鍵字的語法格式如下:

克隆对象名称 = clone 原对象名称;

你可以把複製這個動作理解為,把物件的記憶體區域複製,賦值後的物件與原對象之間是相互獨立的。而他們之間的成員方法、屬性和值都是完全相同的。

接下來我們透過一個簡單的實例來看clone的能力吧,範例如下:

<?php
    class father{
        public $study1, $study2;
        public function __construct($study1, $study2){
            $this -> study1 = $study1;
            $this -> study2 = $study2;
        }
        public function output(){
            echo $this -> study1.&#39;,&#39;. $this -> study2.&#39;<br>&#39;;
        }
    }
    $obj  = new father(&#39;好好学习&#39;, &#39;天天向上&#39;);
    $obj2 = clone $obj;//克隆$obj
    $obj  -> output();
    $obj2 -> output();
    echo &#39;<pre class="brush:php;toolbar:false">&#39;;
    var_dump($obj);
    var_dump($obj2);
?>

輸出結果:

PHP中clone關鍵字和__clone()方法的使用(實例詳解)

##其中我們需要注意的是,如果使用=將一個物件賦值給一個變量,那麼這時得到的將是一個物件的引用,透過這個變數更改屬性的值將會影響原來的物件。所以還是得用clone,更改屬性值不會影響原來的物件。

透過上述實例,我們已經知道應該如何去克隆一個物件來為我們所用了,但是物件複製成功後,他的屬性、成員方法以及值都是和原物件一模一樣完全相同的,那這時候我們光說更改屬性不會影響原來的對象,但是應該怎麼做去給克隆後的副本成員屬性重新賦值呢?這時候我們就要用到PHP魔術方法中的

__clone()方法。

<strong>__clone()<span style="font-size: 20px;"></span></strong>#方法##PHP中

__clone()

方法是不能夠直接呼叫的,有clone才有__clone(),只有透過clone關鍵字克隆了一個物件的時候,才能夠透過這個克隆出來的物件來呼叫__clone()方法。
這時候再用到clone建立副本的時候,就需要注意了,PHP會檢查__clone()是否存在。

要是不存在的話,PHP會預設賦值物件的全部屬性;如果__clone()存在,也就是定義過了,那麼也就會負責了新物件的屬性。

加下來我們透過一個實例來看一下,實例如下:

<?php
    class father{
        public $name, $url;
        public function __construct($name, $url){
            $this -> name = $name;
            $this -> url  = $url;
        }
        public function output(){
            echo $this -> name.&#39;,&#39;.$this -> url.&#39;<br>&#39;;
        }
        public function __clone(){//通过__clone()来更改新对象的属性
            $this -> name = &#39;福如东海&#39;;
            $this -> url  = &#39;寿比南山&#39;;
        }
    }
    $obj  = new father(&#39;好好学习&#39;, &#39;天天向上&#39;);
    $obj2 = clone $obj;
    $obj  -> output();
    $obj2 -> output();
?>

輸出結果:


##由上述實例,可以看出__clone() 方法不需要任何參數。其中我們還有一點可以知道的就是,想要禁止複製的話,只需要在類別中設定一個空的,存取權限為PHP中clone關鍵字和__clone()方法的使用(實例詳解) private

(私有的)的

__clone() 方法的話,就可以起到禁止克隆的目的了。 大家如果有興趣的話,可以點選《PHP影片教學

》進行更多關於PHP知識的學習。

以上是PHP中clone關鍵字和__clone()方法的使用(實例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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