在php中,clone關鍵字可以用於克隆對象,語法格式「複製物件名稱= clone 原始物件名稱;」;當物件複製成功後,它們中的成員方法、屬性以及值是完全相同的。如果要對複製後副本的成員屬性重新賦值,可以使用「__clone()」方法。
本教學操作環境:windows7系統、PHP7.1版,DELL G3電腦
PHP clone關鍵字(克隆物件)
PHP 中的物件模型是透過引用來呼叫物件的,但有時需要建立一個物件的副本,在改變原有物件時不希望影響物件副本。如果使用new關鍵字重新建立對象,再為屬性賦上相同的值,這樣做會比較煩瑣而且也容易出錯。在 PHP 中可以根據現有的對象克隆出一個完全相同的對象,克隆以後,原本對象和副本對像是完全獨立互不干擾的。
在PHP 中可以使用clone 關鍵字克隆對象,語法格式如下:
克隆对象名称 = clone 原对象名称;
因為clone 的方式實際上是對整個對象的內存區域進行了一次複製並用新的對象變量指向新的內存,因此賦值後的物件和原始物件之間是相互獨立的。
物件複製成功後,它們中的成員方法、屬性、以及值是完全相同的。如果要對克隆後副本的成員屬性重新賦值,可以使用 __clone() 方法。
【範例】下面透過一個簡單的範例來示範一下 clone 關鍵字的使用。
<?php class Website{ public $name, $url; public function __construct($name, $url){ $this -> name = $name; $this -> url = $url; } public function output(){ echo $this -> name.','.$this -> url.'<br>'; } } $obj = new Website('PHP中文网', 'https://www.php.cn/'); $obj2 = clone $obj; $obj -> output(); $obj2 -> output(); echo '<pre class="brush:php;toolbar:false">'; var_dump($obj); var_dump($obj2); ?>
運行結果如下:
PHP中文网,https://www.php.cn/ PHP中文网,https://www.php.cn/ object(Website)#1 (2) { ["name"]=> string(16) "PHP中文网" ["url"]=> string(27) "https://www.php.cn/" } object(Website)#2 (2) { ["name"]=> string(16) "PHP中文网" ["url"]=> string(27) "https://www.php.cn/" }
注意:如果使用=將一個物件賦值給一個變量,那麼這時得到的將是一個物件的引用,透過這個變數更改屬性的值將會影響原來的物件。
__clone() 魔術方法
__clone() 方法不能夠直接被調用,只有當透過clone 關鍵字複製一個物件時才可以使用該物件呼叫__clone() 方法。當建立物件的副本時,PHP 會檢查 __clone() 方法是否存在。如果不存在,那麼它就會呼叫預設的 __clone() 方法,複製物件的所有屬性。如果 __clone() 方法已經定義過,那麼 __clone() 方法就會負責設定新物件的屬性。所以在 __clone() 方法中,只需要覆寫那些需要改變的屬性就可以了。
__clone() 方法不需要任何參數,以下透過範例來示範:
<?php class Website{ 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(){ $this -> name = 'PHP教程'; $this -> url = 'https://www.php.cn/'; } } $obj = new Website('PHP中文网', 'https://www.php.cn/'); $obj2 = clone $obj; $obj -> output(); $obj2 -> output(); ?>
執行結果如下:
PHP中文网,https://www.php.cn/ PHP教程,https://www.php.cn/
提示:如果在類別中設定一個空的,存取權限為private(私有的)的__clone() 方法的話,可以起到禁止克隆的作用。
推薦學習:《PHP影片教學》
以上是php clone關鍵字怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!