php對象複製與(php copy函數)

本文目錄一覽:

PHP對象的淺複製與深複製的實例詳解

PHP對象的淺複製與深複製的實例詳解

最近在看原型模式時注意到這個問題~~PHP中對象

‘=’

與‘clone’的區別

實例代碼:

//聚合類

class

ObjA

{

public

$num

=

0;

public

$objB;//包含的對象

function

__construct()

{

$this-objB

=

new

ObjB();

}

//只有實現了下面方法聚合類

才能實現深複製

/*function

__clone()

{

$this-objB

=

clone

$this-objB;

}*/

}

class

ObjB

{

public

$num2

=

0;

}

//原型對象

$objA

=

new

ObjA();

//複製對象(‘=’複製引用)

$objA2

=

$objA;

$objA2-num

=

2;

//隨着$objA2-num的變化

$objA-num也變化了

print_r($objA-num.’br/’);//結果為2

print_r($objA2-num.’br/’);//結果為2

//複製對象(‘clone’關鍵字克隆)

$objA3

=

clone

$objA;

$objA3-num

=

4;

//隨着$objA3-num的變化

$objA-num沒有變化

print_r($objA-num.’br/’);//結果為2

print_r($objA3-num.’br/’);//結果為4

//但是clone的對象(是聚合類)中包含其他對象時所包含的對象(objB)複製的是引用

$objA3-objB-num2

=

7;

print_r($objA3-objB-num2.’br/’);//結果是7

print_r($objA-objB-num2.’br/’);//結果是7/pre

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

怎麼在php中使用clone複製對象

(1)調用Cbitmap類的LoadBitmap函數調入位圖資源。

(2)調用CDC::CreatCompatibleDC函數創建一個內存設備環境,以便位圖在內存中保留下來,並於指定設備環境兼容。

php對象賦值問題

你這個是直接賦值了,然後又操作了$instance,沒有操作$assigned,賦值的意思是,你在內存中開闢了一個空間,內容和$instance一樣,所以你操作$instance,不會對$assigned有影響。

正確的應該是這樣的:

第一行:$assigned = $instance;

這個就是把$assigned 和 $instance 指向了同一個內存地址,改變了$instance,$assigned當然也改變了。

php clone後是什麼對象

在php5中,對象的傳遞方式默認為引用傳遞,如果我們想要在內存中生成兩個一樣的對象或者創建一個對象的副本,這時可以使用“克隆”。

通過 clone 克隆一個對象

對象的複製是通過關鍵字 clone 來實現的。用 clone 克隆出來的對象與原對象沒有任何關係,它是把原來的對象從當前的位置重新複製了一份,也就是相當於在內存中新開闢了一塊空間。通過關鍵字 clone 可以克隆一個對象,語法格式如下:

$克隆對象名稱=clone $原對象名稱;

__clone()方法

對象的__clone()方法不能夠直接被調用,只有當通過關鍵字 clone 克隆一個對象時才可以使用該對象調用__clone()方法。當創建對象的一個副本時,php5將會檢查__clone()方法是否存在。如果不存在,那 么它就會調用默認的__clone()方法,複製對象的所有屬性。如果__clone方法已經定義過,那麼__clone()方法就會負責設置新對象的屬 性。所以在__clone()方法中,只需要覆蓋那些需要更改的屬性就可以了。例子如下:

php問題 克隆對象和引用對象的區別是什麼

複製文件、建立快捷方式的區別,克隆就是複製,引用就是快捷方式,引用的對象實際上同一個東西,修改任何一個變量,另外一個也會跟着變化。

PHP對象克隆clone用法示例

本文實例講述了PHP對象克隆clone用法。分享給大家供大家參考,具體如下:

淺克隆:只是克隆對象中的非對象非資源數據,即對象中屬性存儲的是對象類型,則會出現克隆不完全

?php

class

B{

public

$val

=

10;

}

class

A{

public

$val

=

20;

public

$b;

public

function

__construct(){

$this-b

=

new

B();

}

}

$obj_a

=

new

A();

$obj_b

=

clone

$obj_a;

$obj_a-val

=

30;

$obj_a-b-val

=

40;

var_dump($obj_a);

echo

‘br’;

var_dump($obj_b);

運行結果如下:

object(A)[1]

public

‘val’

=

int

30

public

‘b’

=

object(B)[2]

public

‘val’

=

int

40

object(A)[3]

public

‘val’

=

int

20

public

‘b’

=

object(B)[2]

public

‘val’

=

int

40

深克隆:一個對象的所有屬性數據都徹底的複製,需要使用魔術方法__clone(),並在裡面實現深度克隆

?php

class

B{

public

$val

=

10;

}

class

A{

public

$val

=

20;

public

$b;

public

function

__construct(){

$this-b

=

new

B();

}

public

function

__clone(){

$this-b

=

clone

$this-b;

}

}

$obj_a

=

new

A();

$obj_b

=

clone

$obj_a;

$obj_a-val

=

30;

$obj_a-b-val

=

40;

var_dump($obj_a);

echo

‘br’;

var_dump($obj_b);

運行結果如下:

object(A)[1]

public

‘val’

=

int

30

public

‘b’

=

object(B)[2]

public

‘val’

=

int

40

object(A)[3]

public

‘val’

=

int

20

public

‘b’

=

object(B)[4]

public

‘val’

=

int

10

更多關於PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《PHP網絡編程技巧總結》、《PHP數組(Array)操作技巧大全》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

原創文章,作者:XXGGL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/129580.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XXGGL的頭像XXGGL
上一篇 2024-10-03 23:26
下一篇 2024-10-03 23:26

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29
  • 分段函數Python

    本文將從以下幾個方面詳細闡述Python中的分段函數,包括函數基本定義、調用示例、圖像繪製、函數優化和應用實例。 一、函數基本定義 分段函數又稱為條件函數,指一條直線段或曲線段,由…

    編程 2025-04-29

發表回復

登錄後才能評論