在先前的文章中為大家帶來了《PHP中的命名空間定義與使用(實例詳解)》,其中詳細的介紹了PHP中的命名空間的定義與使用,本篇繼續給大家看一看PHP中的相關知識,關於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.','. $this -> study2.'<br>'; } } $obj = new father('好好学习', '天天向上'); $obj2 = clone $obj;//克隆$obj $obj -> output(); $obj2 -> output(); echo '<pre class="brush:php;toolbar:false">'; var_dump($obj); var_dump($obj2); ?>
輸出結果:
__clone()方法。
<strong>__clone()<span style="max-width:90%"></span></strong>
#方法##PHP中
方法是不能夠直接呼叫的,有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影片教學
以上是PHP中clone關鍵字和__clone()方法的使用(實例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!