欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

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

          在之前的文章中給大家?guī)砹恕禤HP中的命名空間定義與使用(實例詳解)》,其中詳細的介紹了PHP中的命名空間的定義與使用,本篇繼續(xù)給大家看一看PHP中的相關知識,關于clone關鍵字的使用。希望對大家有幫助!

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

          在我們之前的學習中,有很多的關鍵字,比如$this$new之類的,今天我們繼續(xù)來看一下在PHP中也算比較常用到的關鍵字clone克隆關鍵字。在學習克隆關鍵字之前,我們需要知道PHP中的對象模型是通過引用來調用對象的,但是又是偶需要建議一個對象的副本,目的就是想再原有對象改變的時候能夠不影響到對象副本。

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

          clone關鍵字

          我們希望有一個能夠和原本對象互不干擾的副本,在PHP中通過clone關鍵字就可以實現(xiàn)克隆對象了。

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

          克隆對象名稱 = clone 原對象名稱;

          你可以把克隆這個動作理解為,把對象的內存區(qū)域進行復制,賦值后的對象與原對象之間是相互獨立的。并且他們之間的成員方法、屬性和值都是完全相同的。

          接下來我們通過一個簡單的實例來看一下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); ?>

          輸出結果:

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

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

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

          __clone()方法

          PHP中__clone()方法是不能夠直接調用的,有clone才有__clone(),只有通過clone關鍵字克隆了一個對象的時候,才能夠通過這個克隆出來的對象來調用__clone()方法。

          這時候再用到clone創(chuàng)建副本的時候,就需要注意了,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(); ?>

          輸出結果:

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

          由上述實例,可以看出__clone() 方法不需要任何參數(shù)。其中我們還有一點可以知道的就是,想要禁止克隆的話,只需要在類中設置一個空的,訪問權限為 private(私有的)的 __clone() 方法的話,就可以起到禁止克隆的目的了。

          大家如果感興趣的話,可以點擊《PHP視頻教程》進行

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號