新聞中心
new關(guān)鍵字重新創(chuàng)建對象,再為屬性賦上相同的值,這樣做會比較煩瑣而且也容易出錯。在 PHP 中可以根據(jù)現(xiàn)有的對象克隆出一個完全一樣的對象,克隆以后,原本對象和副本對象是完全獨立互不干擾的。
創(chuàng)新互聯(lián)致力于成都網(wǎng)站制作、網(wǎng)站設計、外貿(mào)網(wǎng)站建設,成都網(wǎng)站設計,集團網(wǎng)站建設等服務標準化,推過標準化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務水平進行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場競爭中脫穎而出。 選擇創(chuàng)新互聯(lián),就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設服務!
在 PHP 中可以使用 clone 關(guān)鍵字克隆對象,語法格式如下:
克隆對象名稱 = clone 原對象名稱;
因為 clone 的方式實際上是對整個對象的內(nèi)存區(qū)域進行了一次復制并用新的對象變量指向新的內(nèi)存,因此賦值后的對象和原對象之間是相互獨立的。
對象克隆成功后,它們中的成員方法、屬性以及值是完全相同的。如果要對克隆后副本的成員屬性重新賦值,可以使用《PHP魔術(shù)方法》中介紹的 __clone() 方法。
【示例】下面通過一個簡單的示例來演示一下 clone 關(guān)鍵字的使用。
name = $name;
$this -> url = $url;
}
public function output(){
echo $this -> name.','.$this -> url.'
';
}
}
$obj = new Website('C語言中文網(wǎng)', 'http://c.biancheng.net/php/');
$obj2 = clone $obj;
$obj -> output();
$obj2 -> output();
echo '';
var_dump($obj);
var_dump($obj2);
?>
運行結(jié)果如下:
C語言中文網(wǎng),http://c.biancheng.net/php/
C語言中文網(wǎng),http://c.biancheng.net/php/
object(Website)#1 (2) {
["name"]=>
string(16) "C語言中文網(wǎng)"
["url"]=>
string(27) "http://c.biancheng.net/php/"
}
object(Website)#2 (2) {
["name"]=>
string(16) "C語言中文網(wǎng)"
["url"]=>
string(27) "http://c.biancheng.net/php/"
}
注意:如果使用 = 將一個對象賦值給一個變量,那么這時得到的將是一個對象的引用,通過這個變量更改屬性的值將會影響原來的對象。
__clone() 魔術(shù)方法
__clone() 方法不能夠直接被調(diào)用,只有當通過 clone 關(guān)鍵字克隆一個對象時才可以使用該對象調(diào)用 __clone() 方法。當創(chuàng)建對象的副本時,PHP 會檢查 __clone() 方法是否存在。如果不存在,那么它就會調(diào)用默認的 __clone() 方法,復制對象的所有屬性。如果 __clone() 方法已經(jīng)定義過,那么 __clone() 方法就會負責設置新對象的屬性。所以在 __clone() 方法中,只需要覆蓋那些需要更改的屬性就可以了。
__clone() 方法不需要任何參數(shù),下面通過一個示例來演示一下:
name = $name;
$this -> url = $url;
}
public function output(){
echo $this -> name.','.$this -> url.'
';
}
public function __clone(){
$this -> name = 'PHP教程';
$this -> url = 'http://c.biancheng.net/';
}
}
$obj = new Website('C語言中文網(wǎng)', 'http://c.biancheng.net/php/');
$obj2 = clone $obj;
$obj -> output();
$obj2 -> output();
?>
運行結(jié)果如下:
C語言中文網(wǎng),http://c.biancheng.net/php/
PHP教程,http://c.biancheng.net/
提示:如果在類中設置一個空的,訪問權(quán)限為 private(私有的)的 __clone() 方法的話,可以起到禁止克隆的作用。
名稱欄目:PHPclone關(guān)鍵字(克隆對象)
文章分享:http://fisionsoft.com.cn/article/djiiehh.html


咨詢
建站咨詢
