PHP 物件複製 clone 關鍵字與 __clone() 方法
clone 關鍵字用來複製一個完全一樣的對象,__clone() 方法來重寫原本的屬性和方法。
物件克隆
有的時候我們需要在一個專案裡面使用兩個或多個一樣的對象,如果使用 new 關鍵字重新建立對象,再賦值上相同的屬性,這樣做比較煩瑣而且也容易出錯。 PHP 提供了物件克隆功能,可以根據一個物件完全克隆出一個一模一樣的對象,而且複製以後,兩個物件互不干擾。
使用關鍵字 clone 來複製物件。語法:
$object2 = clone $object;
例子:
<?php class Person { private $name; private $age; function __construct($name, $age) { $this->name=$name; $this->age=$age; } function say() { echo "我的名字叫:".$this->name."<br />"; echo "我的年龄是:".$this->age; } } $p1 = new Person("张三", 20); $p2 = clone $p1; $p2->say(); ?>
運行例子,輸出:
我的名字叫:張三
我的年齡是:20
我的名字叫:張三我的年齡是:20我的名字叫:張三
我的年齡是:20
我的名字叫:張三我的年齡是:20我的名字是
複製後改變原物件的內容,需要在類別中加入一個特殊的__clone() 方法來重寫原本的屬性和方法。 __clone() 方法只會在物件被複製的時候自動呼叫。 例子:<?php class Person { private $name; private $age; function __construct($name, $age) { $this->name = $name; $this->age = $age; } function say() { echo "我的名字叫:".$this->name; echo " 我的年龄是:".$this->age."<br />"; } function __clone() { $this->name = "我是假的".$this->name; $this->age = 30; } } $p1 = new Person("张三", 20); $p1->say(); $p2 = clone $p1; $p2->say(); ?>