php對象深拷貝,php淺拷貝和深拷貝的區別

本文目錄一覽:

copy和mutableCopy和直接賦值的區別

Cocoa論壇的一個帖子中我看到了如下的說法(地 d.php?tid-135884.html)。

1、非容器對象

對不可變對象複製,copy是指針複製(淺拷貝)和mutableCopy就是對象複製(深拷貝)。

對可變對象複製,都是深拷貝,但是copy返回的對象是不可變的。

2、容器對象

對於容器本身,同非容器對象。

但是,對於容器內的對象,則都是指

php什麼是淺拷貝,深

php淺拷貝:賦值時,引用賦值,相當於取了一個別名。對其中一個修改,會影響另一個

深拷貝:賦值時值完全複製,完全的copy,對其中一個作出改變,不會影響另一個

PHP中, = 賦值時,普通對象是深拷貝,但對對象來說,是淺拷貝。也就是說,對象的賦值是引用賦值。(對象作為參數傳遞時,也是引用傳遞,無論函數定義時參數前面是否有符號)

在php中 clone 對象的值可以改變嗎?(對象1中$var=2, 對象2克隆對象1 ,對象2.$var=3,print 對象1.$var;)

對象克隆後,得到是一個對象的實例,並將數據複製一份,兩者各自的數據都是獨立的。請參看以下代碼:

?php

class corporatedrone {

private $employeeid;

private $tiecolor;

function setEmployeeID($employeeid) {

$this-employeeid = $employeeid;

}

function getEmployeeID() {

return $this-employeeid;

}

function setTiecolor($tiecolor) {

$this-tiecolor = $tiecolor;

}

function getTiecolor() {

return $this-tiecolor;

}

}

// 建立對象1

$drone1 = new corporatedrone();

// 設置對象1屬性

$drone1-setEmployeeID(“12345”);

$drone1-setTiecolor(“red”);

// 克隆對象1

$drone2 = clone $drone1;

// 設置對象2屬性

$drone2-setEmployeeID(“67890”);

// 輸出兩個對象的成員屬性

echo “對象1 employeeID: “.$drone1-getEmployeeID().”br /”;

echo “對象1 tie color: “.$drone1-getTiecolor().”br /”;

echo “對象2 employeeID: “.$drone2-getEmployeeID().”br /”;

echo “對象2 tie color: “.$drone2-getTiecolor().”br /”;

?

對象賦值、淺拷貝和深拷貝

賦值是將原對象的內存地址直接給到新對象

生成一個新的對象,新對象擁有原對象的所有屬性。如果屬性值的類型是基本類型,就將原屬性的值拷貝過來;如果屬性值是引用類型,就將原屬性值的地址拷貝過來,如果原屬性值發生改變時,新屬性的值也會發生改變。

將原對象中的各個屬性值重新分配內存地址,不論原對象的屬性值是基本類型還是引用類型,原對象屬性值的變化都不會影響新對象的屬性值。

這種方法雖然可以實現數組或對象深拷貝,但不能處理函數和正則,因為這兩者基於JSON.stringify和JSON.parse處理後,得到的正則就不再是正則(變為空對象),得到的函數就不再是函數(變為null)了

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

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

相關推薦

  • Python中new和init的區別

    new和init都是Python中常用的魔法方法,它們分別負責對象的創建和初始化,本文將從多個角度詳細闡述它們的區別。 一、創建對象 new方法是用來創建一個對象的,它是一個類級別…

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

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

    編程 2025-04-29
  • Sublime Test與Python的區別

    Sublime Text是一款流行的文本編輯器,而Python是一種廣泛使用的編程語言。雖然Sublime Text可以用於編寫Python代碼,但它們之間有很多不同之處。接下來從…

    編程 2025-04-29
  • Shell腳本與Python腳本的區別

    本文將從多個方面對Shell腳本與Python腳本的區別做詳細的闡述。 一、語法差異 Shell腳本和Python腳本的語法存在明顯差異。 Shell腳本是一種基於字符命令行的語言…

    編程 2025-04-29
  • Python中while語句和for語句的區別

    while語句和for語句是Python中兩種常見的循環語句,它們都可以用於重複執行一段代碼。然而,它們的語法和適用場景有所不同。本文將從多個方面詳細闡述Python中while語…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Web程序和桌面程序的區別

    Web程序和桌面程序都是進行軟件開發的方式,但是它們之間存在很大的區別。本文將從多角度進行闡述。 一、運行方式 Web程序運行於互聯網上,用戶可以通過使用瀏覽器來訪問它。而桌面程序…

    編程 2025-04-29
  • 面向對象編程、類和對象

    面向對象編程(Object-Oriented Programming, OOP)是一種編程方法,它將現實世界中的事物抽象為對象(Object),對象的屬性和方法被封裝成類(Clas…

    編程 2025-04-29
  • TensorFlow和Python的區別

    TensorFlow和Python是現如今最受歡迎的機器學習平台和編程語言。雖然兩者都處於機器學習領域的主流陣營,但它們有很多區別。本文將從多個方面對TensorFlow和Pyth…

    編程 2025-04-28
  • 麥語言與Python的區別

    麥語言和Python都是非常受歡迎的編程語言。它們各自有自己的優缺點和適合的應用場景。本文將從語言特性、語法、生態系統等多個方面,對麥語言和Python進行詳細比較和闡述。 一、語…

    編程 2025-04-28

發表回復

登錄後才能評論