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/n/131418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
BYWCBYWC
上一篇 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

发表回复

登录后才能评论