程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> PHP克隆對象和

PHP克隆對象和

編輯:PHP基礎知識
 

對象克隆函數的由來
   PHP4 面向對象功能最大的缺點之一,是將對象視為另一種數據類型,這使得很多常見的OOP 方法無法使用,如設計模式。這些方法依賴於將對象作為引用傳遞給其他類方法,而不是作為值傳遞,而按值傳遞卻是PHP 的默認做法。幸好,PHP5解決了這個問題,現在所有對象在默認情況下都被視為引用。但是,由於所有對象都被視為引用而不是值,所以現在復制對象更為困難。如果嘗試復制一個引用的對象,這只會指向原對象的地址位置。為了解決復制問題,PHP 提供了一種克隆(clone )對象的顯式方法
下面文檔轉載自阿可(步網在線)
克隆對象
------------------------------------
方法名:_ _clone
      關鍵字: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;

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved