如何使用PHP中clone關(guān)鍵字和__clone()方法

本篇內(nèi)容介紹了“如何使用PHP中clone關(guān)鍵字和__clone()方法”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)公司專注于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點(diǎn)出發(fā),讓客戶在網(wǎng)絡(luò)營(yíng)銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)待客戶,用專業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

如何使用PHP中clone關(guān)鍵字和__clone()方法

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

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

clone關(guān)鍵字

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

clone關(guān)鍵字的語法格式如下:

克隆對(duì)象名稱 = clone 原對(duì)象名稱;

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

接下來我們通過一個(gè)簡(jiǎn)單的實(shí)例來看一下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('好好學(xué)習(xí)', '天天向上');
    $obj2 = clone $obj;//克隆$obj
    $obj  -> output();
    $obj2 -> output();
    echo '<pre>';
    var_dump($obj);
    var_dump($obj2);
?>

輸出結(jié)果:

如何使用PHP中clone關(guān)鍵字和__clone()方法

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

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

__clone()方法

PHP中__clone()方法是不能夠直接調(diào)用的,有clone才有__clone(),只有通過clone關(guān)鍵字克隆了一個(gè)對(duì)象的時(shí)候,才能夠通過這個(gè)克隆出來的對(duì)象來調(diào)用__clone()方法。

這時(shí)候再用到clone創(chuàng)建副本的時(shí)候,就需要注意了,PHP會(huì)檢查__clone()是否存在。

要是不存在的話,PHP會(huì)默認(rèn)賦值對(duì)象的全部屬性;如果__clone()存在,也就是定義過了,那么也就會(huì)負(fù)責(zé)了新對(duì)象的屬性。

加下來我們通過一個(gè)實(shí)例來看一下,實(shí)例如下:

<?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()來更改新對(duì)象的屬性
            $this -> name = '福如東海';
            $this -> url  = '壽比南山';
        }
    }
    $obj  = new father('好好學(xué)習(xí)', '天天向上');
    $obj2 = clone $obj;
    $obj  -> output();
    $obj2 -> output();
?>

輸出結(jié)果:

如何使用PHP中clone關(guān)鍵字和__clone()方法

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

“如何使用PHP中clone關(guān)鍵字和__clone()方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

新聞標(biāo)題:如何使用PHP中clone關(guān)鍵字和__clone()方法
網(wǎng)頁路徑:http://muchs.cn/article38/ghsgsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、搜索引擎優(yōu)化App設(shè)計(jì)、全網(wǎng)營(yíng)銷推廣網(wǎng)站導(dǎo)航、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司