您好,登錄后才能下訂單哦!
本篇內容介紹了“如何使用PHP中clone關鍵字和__clone()方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在我們之前的學習中,有很多的關鍵字,比如$this
、$new
之類的,今天我們繼續來看一下在PHP中也算比較常用到的關鍵字clone
克隆關鍵字。在學習克隆關鍵字之前,我們需要知道PHP中的對象模型是通過引用來調用對象的,但是又是偶需要建議一個對象的副本,目的就是想再原有對象改變的時候能夠不影響到對象副本。
這時候如果使用new關鍵字是可以重新創建對象,然后再給屬性賦上相同的值,也是可以起到新建副本的作用,但是這種方法不僅麻煩而且容易出錯,這時候就希望PHP能有一個完全一樣的對象,而且這兩個還不是互相干擾的,也就是我們想的克隆。那應該怎樣去實現呢?不慌,接著看。
clone
關鍵字
我們希望有一個能夠和原本對象互不干擾的副本,在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.','. $this -> study2.'<br>'; } } $obj = new father('好好學習', '天天向上'); $obj2 = clone $obj;//克隆$obj $obj -> output(); $obj2 -> output(); echo '<pre>'; var_dump($obj); var_dump($obj2); ?>
輸出結果:
其中我們需要注意的是,如果使用=將一個對象賦值給一個變量,那么這時得到的將是一個對象的引用,通過這個變量更改屬性的值將會影響原來的對象。所以還是得用clone,更改屬性值不會影響到原來的對象。
通過上述實例,我們已經知道應該如何去克隆一個對象來為我們所用了,但是對象克隆成功后,他的屬性、成員方法以及值都是和原對象一模一樣完全相同的,那這時候我們光說更改屬性不會影響到原來的對象,但是應該怎樣去給克隆后的副本成員屬性重新賦值呢?這時候我們就要用到PHP魔術方法中的__clone()
方法。
__clone()
方法
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.','.$this -> url.'<br>'; } public function __clone(){//通過__clone()來更改新對象的屬性 $this -> name = '福如東海'; $this -> url = '壽比南山'; } } $obj = new father('好好學習', '天天向上'); $obj2 = clone $obj; $obj -> output(); $obj2 -> output(); ?>
輸出結果:
由上述實例,可以看出__clone() 方法不需要任何參數。其中我們還有一點可以知道的就是,想要禁止克隆的話,只需要在類中設置一個空的,訪問權限為 private
(私有的)的 __clone()
方法的話,就可以起到禁止克隆的目的了。
“如何使用PHP中clone關鍵字和__clone()方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。