`

对象复制的2种方式区别

 
阅读更多

     PHP5使用了Zend引擎II,对象被储存于独立的结构Object Store中,而不像其它一般变量那样储存于Zval(PHP4中对象和一般变量一样存储于Zval)

    在Zval中仅存储对象的指针而不是内容(value)。当我们复制一个对象或者将一个对象当作参数传递给一个函数时,我们不需要复制数据。仅仅保持相同的对象指针并由另一个zval通知现在这个特定的对象指向的Object Store。由于对象本身位于Object Store,我们对它所作的任何改变将影响到所有持有该对象指针的zval结构----表现在程序中就是目标对象的任何改变都会影响到源对象。这使PHP对象看起来就像总是通过引用(reference)来传递,因此PHP5中对象默认为通过“引用”传递,不再需要像在PHP4中那样使用&来声明

 

class one{

        public $name;

 

        function __construct($name){

            $this->name = $name;

        }

 

        public function demo(){

            echo $this->name;

        }

 

        public function setName($newName){

            $this->name = $newName;

        }

 

        function __clone(){

            $this->name = "HAHA";

        }

 

    }

 

    $a = new one('ajia');

    //$b = $a;         //对象复制是引用复制,会互相影响

    $b = clone $a; //__clone方式的对象复制就不会互相影响

    $a->setName('youxi');

    //$b->setName('123');

    $b->demo();

分享到:
评论

相关推荐

    MyBatisDemo && JAVA把一个对象的全部属性复制到另一个相同的对象

    首先,我们要理解Java中的对象复制有浅拷贝和深拷贝两种方式。浅拷贝只复制对象本身,不复制引用的对象;深拷贝不仅复制对象,还复制对象中引用的对象。在描述中提到的方法,很可能是关于深拷贝的实现。 在Java中,...

    java中对象和对象引用的区别!

    - **引用**:引用是用于访问对象的一种方式。简单来说,引用变量保存了对象的内存地址,通过该地址我们可以访问到对象本身。引用变量并不包含实际的对象数据,而仅仅是提供了一种手段去获取这些数据。 #### 关键点...

    Java编程实现对象克隆(复制)代码详解

    3. 实现深克隆:如果需要深克隆对象,可以使用递归的方式,逐个复制对象的所有属性。 浅克隆与深克隆的区别: 浅克隆:浅克隆仅复制对象的引用,而不复制对象的属性。例如,Student stu1 = new Student(); Student...

    对象克隆(clone)详解.docx

    【对象克隆(clone)详解】 对象克隆是Java编程中的一个重要概念,它允许我们创建一个已有对象的副本,而不影响原始对象。...理解这两种克隆方式的区别和应用场景,可以帮助我们在编程中更有效地管理和复制对象。

    java对象复制.pdf

    Java对象复制是一个重要的...总的来说,Java对象复制是一个复杂的过程,需要考虑`clone()`方法的使用、`Cloneable`接口的实现以及浅拷贝和深拷贝的区别。在实际开发中,根据具体需求选择合适的复制方式是非常重要的。

    Java中对象的深复制和浅复制详解.doc

    对象复制分为两种主要类型:浅复制(浅克隆)和深复制(深克隆)。理解这两种复制方式的区别对于优化程序性能和避免意外数据更改至关重要。 1. **浅复制(浅克隆)** 浅复制是指创建一个新对象,该对象拥有原始...

    值引用与对象引用

    理解值引用与对象引用之间的区别对于编程至关重要。值引用适用于基本类型和值类型,提供了一种简单且高效的引用机制;而对象引用则用于引用复杂的对象结构,虽然更加灵活但也带来了更多的潜在问题。在处理诸如`...

    java对象和对象的引用之间的关系

    #### 四、引用赋值与对象复制的区别 当我们执行`veh2 = veh1;`这样的操作时,实际上发生的是引用的赋值,而不是对象的复制。这意味着`veh2`现在指向了`veh1`所指向的同一个对象。因此,对这个对象所做的任何更改都...

    Java创建对象的四种方法[借鉴].pdf

    Java是一种面向对象的编程语言,创建对象是...`clone()`方法用于复制对象,需要注意深复制和浅复制的区别;反序列化则常用于持久化存储和网络传输后恢复对象的状态。在实际开发中,应根据需求选择合适的方法创建对象。

    复制对象(一)copy和mutableCopy方法对应Demo

    在iOS和Mac开发中,Objective-C和Swift等编程语言提供了对象复制的功能,这对于处理数据的独立性和一致性至关重要。本文将详细解析标题“复制对象(一)copy和mutableCopy方法对应Demo”所涵盖的知识点,包括`copy`...

    C#中的浅拷贝和深拷贝

    这两种复制方式各有其特点和适用场景。 #### 值类型变量与引用类型变量 在深入讨论浅拷贝与深拷贝之前,我们需要先理解C#中的两种基本类型的变量:值类型变量和引用类型变量。 - **值类型变量**:这些变量存储的...

    浅谈C++中对象的复制与对象之间的相互赋值

    当需要创建一个与现有对象具有相同属性的新对象时,就会用到对象复制。C++通过复制构造函数来实现这一操作。复制构造函数是一种特殊的构造函数,它接受一个同类型的对象作为参数,通常是常量引用,以避免修改原始...

    java 对象的克隆(浅克隆和深克隆)

    浅克隆是指创建一个新对象,这个新对象复制了原对象的所有基本类型的字段,但是对引用类型字段仅复制引用,而不是复制引用的对象本身。这意味着,如果原对象和克隆对象之间共享一个引用对象,那么对共享对象的修改会...

    think in java 第11章 持有对象

    5. **对象的复制**:Java中有两种对象复制方式:浅复制和深复制。浅复制只是复制对象的引用,而深复制会创建一个新的对象,并复制原对象的所有属性值。理解这两种复制方式的区别对于处理复杂对象结构至关重要。 6. ...

    JavaScript浅层克隆与深度克隆示例详解

    JavaScript中的浅层克隆与深度克隆是两种不同的对象复制方式,它们主要处理对象和数组这类引用类型的数据。这两种克隆方法的区别在于处理对象内部引用值的方式,即对堆内存中对象的复制程度。 1. **浅层克隆**: ...

    Photoshop软件智能对象图层.docx

    在Adobe Photoshop中,智能对象是一种强大的功能,它允许用户以非破坏性的方式编辑图像或图形。智能对象保留了原始数据,这意味着无论你对它们进行多少次编辑,都能随时返回到初始状态,而不会影响图像的质量。以下...

    浅谈java面向对象和引用

    值类型的赋值操作会复制一个副本,而引用类型的赋值只是复制了指向同一对象的引用。 #### 示例解析 以文章中的例子为例: ```java Person person1 = new Person(""); Person person2 = person1; ``` 在这段代码...

    php面向对象.docx

    1. **面向过程与面向对象的区别** - **面向过程**:面向过程编程是一种自顶向下的思维方式,将复杂问题分解为一系列顺序执行的步骤。例如,上传文件的过程可以分为四个步骤,每一步都是独立的操作。这种编程方式...

    Java中创建对象的5种方式总结

    在Java编程语言中,创建对象是程序的基本操作...`clone()`用于复制已有对象,但要注意深拷贝和浅拷贝的区别;而反序列化主要用于数据持久化和网络通信。了解这些方法可以帮助我们更好地理解和控制Java对象的生命周期。

Global site tag (gtag.js) - Google Analytics