`

对象复制的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();

分享到:
评论

相关推荐

    写给大家看的面向对象编程书(第3版).[美]Matt Weisfeld(带详细书签).pdf

    5.6.3 提供一种复制和比较对象的方法 73 5.6.4 让作用域尽可能小 73 5.6.5 类应当对自己负责 74 5.7 设计时充分考虑可维护性 75 5.7.1 使用迭代 76 5.7.2 测试接口 76 5.8 使用对象持久性 78 5.9 小结 79 ...

    【05-面向对象(下)】

    •为了保证Lambda表达式的目标类型是一个明确的函数式接口,可以有如下三种常见方式:  –将Lambda表达式赋值给函数式接口类型的变量。  –将Lambda表达式作为函数式接口类型的参数传给某个方法。  –使用函数...

    c认证web进阶dom与bom

    ID和CLASS的区别 DOM上 1、DOM结构及节点 2、常用节点获取方法和属性 3、常用的节点属性获取方式 关于图片复制到csdn编译器不识别问题 DOM下 1、DOM修改 2、DOM添加 3、DOM删除 案例 DOM控制css样式 1、...

    超级有影响力霸气的Java面试题大全文档

     对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。  Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless ...

    数组的深拷贝与浅拷贝以及数组拷贝的几种方式比较

    目录一、深拷贝与浅拷贝解析浅拷贝深拷贝二、数组拷贝的方式1.for循环来拷贝2.System.arraycopy( )拷贝3.Arrays.copyOf( )拷贝4.clone( )拷贝5.解释三、四种拷贝方式效率比较1. System.arraycopy( )2.Arrays.copyOf...

    C#与.NET技术平台实战演练.part2

    Microsoft.NET1-5-1.NETFramework1-5-2 公共语言执行环境1-5-3 类函数库1-5-4 .NET程序语言第2章C#概论2-1C#应用程序的结构2-1-1 分析C#应用程序结构2-1-2 Using前置命令与System名称空间2-2...

    前端面试宝典V3.0.docx

    2、 创建对象有几种方法(必会) 79 4、简述创建函数的几种方式? (必会) 79 5、Javascript 创建对象的几种方式? (必会) 79 6、请指出 JavaScript 宿主对象和原生对象的区别?(必会) 81 7、 JavaScript 内置...

    重载与覆写/重写的区别

     (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。  重载Overloading是一个类中多态性的一种表现。 (2) Java的方法重载,就是在类中可以创建...

    二十三种设计模式【PDF版】

    者将面向对象的思想巧妙的融合在 Java 的具体技术上,潜移默化的让你感觉到了一种新的语言和新的思想方式的诞生。 但是读完这本书,你对书中这些蕴含的思想也许需要一种更明晰更系统更透彻的了解和掌握,那么你就...

    MySQL 5.1中文手冊

    1.8.5. MySQL与标准SQL的差别 1.8.6. MySQL处理约束的方式 2. 安装MySQL 2.1. 一般安装问题 2.1.1. MySQL支持的操作系统 2.1.2. 选择要安装的MySQL分发版 2.1.3. 怎样获得MySQL 2.1.4. 通过MD5校验和或GnuPG验证...

    Java面试宝典2020修订版V1.0.1.doc

    34、Java创建对象有几种方式 22 35、写出验证Email的正则表达式 22 39、说出十种常见的异常 22 40什么是检查性异常和非检查性异常? 23 41、Java的异常处理机制是什么? 23 42、一个静态方法,里面可不可以用this和...

    C#与.NET技术平台实战演练.part1

    Microsoft.NET1-5-1.NETFramework1-5-2 公共语言执行环境1-5-3 类函数库1-5-4 .NET程序语言第2章C#概论2-1C#应用程序的结构2-1-1 分析C#应用程序结构2-1-2 Using前置命令与System名称空间2-2...

    会计理论考试题

    6.为了以最佳方式、最少的重复,为多种应用服务,把数据集中起来以一定的组织方式存在计算机的外存储器中,就构成 __D___ 。 A、FoxBASE B、DOS C、数据库管理系统 D、数据库 7.用紧急启动盘(ESD)启动计算机后,屏幕...

    计算机应用基础答案(4).doc

    1、在文件上右击,发送到桌面快捷方式2、将文件右键拖至桌面,选择快捷方式 5.WORD操作题目(6分) (1)修改Word文档中的文字字符的字体、颜色、大小,可以使用哪两种不同的方法实现? A)利用格式工具栏 B)利用菜单栏—...

    java面试题

    2. String 和StringBuffer的区别 8 3. 运行时异常与一般异常有何异同? 8 4. 说出ArrayList,Vector,LinkedList的存储性能和特性 8 5. EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean...

    最新最新Python面试题及答案.docx

    最新最新Python面试题及答案全文共6页,当前为第1页...3,copy模块的copy()函数} 深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数} 2、Pyth

    Oracle Stream-安装配置

    这种技术可以将整个数据库、数据库中的对象复制到另一数据库中,通过使用Stream的技术,对归档日志的挖掘,可以在对主系统没有任何压力的情况下,实现对数据库对象级甚至整个数据库的同步。  Oracle 的Streams提供...

    史上最全java面试,103项重点知识,带目录

    2. == 和 equals 的区别是什么? 1 3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 3 4. final 在 java 中有什么作用? 4 5. java 中的 Math.round(-1.5) 等于多少? 4 6. String 属于基础的数据...

    java 面试题 总结

    对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。 Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session ...

Global site tag (gtag.js) - Google Analytics