婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > PHP中的淺復(fù)制與深復(fù)制的實(shí)例詳解

PHP中的淺復(fù)制與深復(fù)制的實(shí)例詳解

熱門標(biāo)簽:清遠(yuǎn)陽(yáng)山400電話號(hào)碼如何申請(qǐng) 施工地圖標(biāo)注怎么做 安徽移動(dòng)外呼系統(tǒng) 深圳400電話辦理那家好 怎么在高德地圖標(biāo)注行走軌跡 百度地圖標(biāo)注飯店位置怎么 襄陽(yáng)房產(chǎn)電銷機(jī)器人招商 個(gè)性化地圖標(biāo)注在線 百度地圖標(biāo)注名編輯

PHP中的淺復(fù)制與深復(fù)制的實(shí)例詳解

前言:

最近溫習(xí)了一下Design Pattern方面的知識(shí),在看到Prototype Pattern這一設(shè)計(jì)模式時(shí),注意到其中涉及到一個(gè)淺復(fù)制與深復(fù)制的問(wèn)題。這里來(lái)總結(jié)一下,提醒自己以后一定要多加注意。

自PHP5起,new運(yùn)算符自動(dòng)返回一個(gè)引用,一個(gè) 對(duì)象變量 已經(jīng)不再保存整個(gè)對(duì)象的值,只是保存一個(gè)標(biāo)識(shí)符來(lái)訪問(wèn)真正的對(duì)象內(nèi)容。當(dāng)對(duì)象作為參數(shù)傳遞,作為結(jié)果返回,或者賦值給另外一個(gè)變量,另外一個(gè)變量跟原來(lái)的不是引用的關(guān)系,只是他們都保存著同一個(gè)標(biāo)識(shí)符的拷貝,這個(gè)標(biāo)識(shí)符指向同一個(gè)對(duì)象的真正內(nèi)容。

這里舉個(gè)栗子:

class Example1
{
  public $name;

  public function __construct($name)
  {
    $this->name = $name;
  }
}

$ex1 = new Example('test1');// $ex1->name現(xiàn)在是:test1
$ex2 = $ex1;// $ex2->name現(xiàn)在是:test1

$ex2->name = 'test2';// 這樣修改一下之后,$ex1->name與$ex2->name都變?yōu)榱耍簍est2

通過(guò)上面這個(gè)例子,應(yīng)該可以理解對(duì)象間引用的概念了,那么我們繼續(xù)往下走,在php中提供了 clone 這個(gè)關(guān)鍵字來(lái)進(jìn)行對(duì)象復(fù)制,還是用上面的類來(lái)演示一下:

$ex1 = new Example('test1');// $ex1->name現(xiàn)在是:test1
$ex2 = clone $ex1;//$ex2->name現(xiàn)在是:test1

$ex2->name = 'test2';//現(xiàn)在$ex1->name還是test1,而$ex2->name是test2

這里看到,通過(guò)clone之后,$ex1與$ex2是兩個(gè)不同的對(duì)象,他們擁有各自的變量環(huán)境。但是這里需要注意,在這兩個(gè)對(duì)象內(nèi)部,擁有的是值類型的數(shù)據(jù),如果是內(nèi)部擁有的是引用類型,那么通過(guò)clone得到的新對(duì)象中的引用則仍然指向原引用。這里就引申出 淺復(fù)制 與 深復(fù)制 的概念:

淺復(fù)制: 使用clone來(lái)復(fù)制對(duì)象,這種復(fù)制叫做“淺復(fù)制“,被賦值對(duì)象的所有變量都還有與原來(lái)對(duì)象相同的值,而所有的對(duì)其他對(duì)象的引用都仍然指向原來(lái)的對(duì)象。

深復(fù)制:被復(fù)制的對(duì)象的所有的變量都含有與原來(lái)的對(duì)象相同的值,除去那些引用其他對(duì)象的變量。

默認(rèn)使用 clone 是進(jìn)行一個(gè)淺復(fù)制,那么如何才能進(jìn)行深復(fù)制呢?

方式一:利用__clone方法

public function __clone()
{
  $this->obj = new Obj();
}

這種方式非常直觀,但是卻有一個(gè)很麻煩的操作方式,就是當(dāng)類中包含多個(gè)引用時(shí),你就需要在__clone方法中逐個(gè)重新設(shè)置。而且還要處理一些循環(huán)引用的問(wèn)題。是很復(fù)雜的。

方式二:利用串行化(冷藏與解凍)

$tmp = serialize($ex1);
$ex2 = unserialize($tmp);

這時(shí)候得到的$ex2就是一個(gè)全新的對(duì)象,這個(gè)過(guò)程在java中也叫作”冷藏“與”解凍“過(guò)程。

序列化是一個(gè)遞歸的過(guò)程,我們不需要理會(huì)被對(duì)象內(nèi)部引用了多少個(gè)對(duì)象以及引用了多少層對(duì)象,我們都可以徹底的復(fù)制。方式二真的很黃很暴力,但是我很喜歡。

如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

您可能感興趣的文章:
  • PHP對(duì)象的淺復(fù)制與深復(fù)制的實(shí)例詳解
  • PHP編程中的__clone()方法使用詳解
  • PHP對(duì)象克隆clone用法示例
  • PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之對(duì)象克隆clone和魔術(shù)方法__clone()用法分析
  • PHP動(dòng)態(tài)地創(chuàng)建屬性和方法, 對(duì)象的復(fù)制, 對(duì)象的比較,加載指定的文件,自動(dòng)加載類文件,命名空間
  • PHP 5.0對(duì)象模型深度探索之對(duì)象復(fù)制
  • PHP面向?qū)ο蟪绦蛟O(shè)計(jì)高級(jí)特性詳解(接口,繼承,抽象類,析構(gòu),克隆等)
  • php實(shí)現(xiàn)對(duì)象克隆的方法
  • php面向?qū)ο笕ヂ?(十一)__toString()用法 克隆對(duì)象 __call處理調(diào)用錯(cuò)誤
  • php5對(duì)象復(fù)制、clone、淺復(fù)制與深復(fù)制實(shí)例詳解

標(biāo)簽:駐馬店 阜陽(yáng) 黑河 欽州 臨夏 延邊 南昌 中衛(wèi)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP中的淺復(fù)制與深復(fù)制的實(shí)例詳解》,本文關(guān)鍵詞  PHP,中的,淺,復(fù)制,與,深,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP中的淺復(fù)制與深復(fù)制的實(shí)例詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PHP中的淺復(fù)制與深復(fù)制的實(shí)例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 石狮市| 汝南县| 皋兰县| 泌阳县| 泊头市| 新营市| 淮南市| 澄城县| 文化| 江阴市| 吉隆县| 寿阳县| 商河县| 阿合奇县| 浦江县| 新密市| 广宁县| 南江县| 治县。| 车险| 绵竹市| 遂宁市| 德江县| 虎林市| 桑日县| 乌拉特前旗| 金坛市| 柞水县| 法库县| 常熟市| 鹤壁市| 宜君县| 怀安县| 全南县| 义乌市| 福州市| 宜黄县| 峨山| 韶山市| 巴楚县| 宁都县|