PHP 對象複製 clone 關鍵字與 __clone() 方法
clone 關鍵字用於複製一個完全一樣的對象,__clone() 方法來重寫原本的屬性和方法。
對象複製
有的時候我們需要在一個項目裡面使用兩個或多個一樣的對象,如果使用 new 關鍵字重新建立對象,再賦值上相同的屬性,這樣做比較煩瑣而且也容易出錯。PHP 提供了對象複製功能,可以根據一個對象完全複製出一個一模一樣的對象,而且複製以後,兩個對象互不干擾。
使用關鍵字 clone 來複製對象。文法:
$object2 = clone $object;
例子:
<?phpclass 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
__clone()
如果想在複製後改變原對象的內容,需要在類中添加一個特殊的 __clone() 方法來重寫原本的屬性和方法。__clone() 方法只會在對象被複製的時候自動調用。
例子:
<?phpclass 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();?>
運行例子,輸出:
我的名字叫:張三 我的年齡是:20
我的名字叫:我是假的張三 我的年齡是:30