中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-10-25 17:04:29 來源:億速云 閱讀:119 作者:iii 欄目:編程語言

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

如何使用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);
?>

輸出結果:

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

其中我們需要注意的是,如果使用=將一個對象賦值給一個變量,那么這時得到的將是一個對象的引用,通過這個變量更改屬性的值將會影響原來的對象。所以還是得用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();
?>

輸出結果:

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

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

“如何使用PHP中clone關鍵字和__clone()方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

丰宁| 郓城县| 长葛市| 平凉市| 甘泉县| 城步| 分宜县| 汽车| 海南省| 无棣县| 清河县| 宝兴县| 台安县| 广河县| 四子王旗| 临西县| 岳阳市| 舒兰市| 富阳市| 祁阳县| 布尔津县| 高安市| 上林县| 犍为县| 濮阳市| 临沂市| 京山县| 海口市| 岱山县| 金堂县| 毕节市| 铜陵市| 通化县| 庆云县| 无棣县| 卢龙县| 梅河口市| 邓州市| 视频| 镶黄旗| 汾西县|