對象克隆函數的由來
PHP4 面向對象功能最大的缺點之一,是將對象視為另一種數據類型,這使得很多常見的OOP 方法無法使用,如設計模式。這些方法依賴於將對象作為引用傳遞給其他類方法,而不是作為值傳遞,而按值傳遞卻是PHP 的默認做法。幸好,PHP5解決了這個問題,現在所有對象在默認情況下都被視為引用
下面文檔轉載自阿可(步網在線)
克隆對象
方法名:_ _clone
關鍵字:clone
通過克隆的方式可以在內存中生成兩個一樣的對象或升級原對象。
------------------------------------
克隆的原理
<1> 內存中只有一個對象
$a=new cla;
$b=$a;
<2>內存中會有兩個對象
$a=new cla;
$b=clone $a;
<3>clone 方法
class cla{
function __clone(){
echo "clone(克隆)時自動初始化的函數";
}
}
-------------------------------------
clone(克隆)對象示例
/***
* desteps.com Michael
***/
<?php
class clo{
public $name="等於的方法";
function fun(){
return $this->name."只是將一個類賦值給另一個類,所以此時內存中仍是一個對象";
}
function __destruct(){
echo "<br/>清理了一個對象";
}
}
$ds=new clo;
$dt=$ds;
echo $dt->fun();
?>
運行結果:
等於的方法只是將一個類賦值給另一個類,所以此時內存中仍是一個對象
清理了一個對象
/***
* desteps.com Michael
***/
<?php
class clo{
public $name="等於方法";
function fun(){
return $this->name."克隆出了一個新的類,所以此時內存中有兩個對象";
}
function __destruct(){
echo "<br/>清理了一個對象";
}
function __clone()
$this->name="clone 方法";
}
}
$ds=new clo;
$dt= clone $ds;
echo $dt->fun();
?>
運行結果:
clone 方法克隆出了一個新的類,所以此時內存中有兩個對象
清理了一個對象
清理了一個對象
下面文檔轉載自
*
* WEB開發筆記 www.chhua.com 每日練習之PHP對象的克隆和__clone()方法的使用
*/
/*
*/
class Rmb{
public $Num;
public function __construct($rmbNum){
$this->Num=$rmbNum;
}
}
class classTest {
public $name;
public $age;
public $id;
public $rmb;
function __construct($name,$age,Rmb $rmb) {//Rmb 對象做為參數
$this->age=$age;
$this->name=$name;
$this->rmb=$rmb;
}
function setId($id){
$this->id=$id;
}
function __clone(){//當克隆對象的時候觸發方法
$this->id=0;
$this->rmb=clone $this->rmb;//克隆對象中的屬性做為新屬性
}
}
$user=new classTest(“www.chenhua.com”,”100″,new Rmb(200));
echo $user->rmb->Num;
$user2= clone $user;//克隆對象
$user2->rmb->Num+=10;//如果不添加__clone()方法,在這裡加10的時候,$user也會被加10
echo $user2->rmb->Num;