PHP5的对象复制

今天用yii开发程序,一个bug改了一晚上,最后发现问题出在了对象复制机制上,PHP5之前的对象复制只需要$object_a = $object_b即可,但PHP5这样得到的是浅复制,及指针指向,并不是真正的数据复制,如改变$object_b的值,则$object_a也同样会发生变化,这时,需要令$object_a = clone $object_b,这样$object_a就不会跟随变化了。

但有一个问题,clone同样是PHP5才有的,因此,如果设计对象复制,则PHP5为分界版本,兼容问题需要注意。

注:Yii2.0默认支持PHP5及以上版本,因此,此问题在Yii2中才会涉及到,不包含Yii 1.X版本。

时间: 2024-12-09 05:09:56

PHP5的对象复制的相关文章

对象复制、克隆、深度clone

-------------------------------------------------------------------------------- ------------------------------------------------- 知道Java对对象和基本的数据类型的处理是不一样的.和C语言一样,当把Java的基本数据类型(如int,char,double等)作为入口参数传给函数体的时候,传入的参数在函数体内部变成了局部变量,这个局部变量是输入参数的一个拷贝,所有的

C++对象模型——对象复制语意学 (Object Copy Semantics)(第五章)

5.3    对象复制语意学 (Object Copy Semantics) 当设计一个 class,并以一个 class object指定给 class object时,有三种选择: 1.什么都不做,因此得以实施默认行为. 2.提供一个 explicit copy assignment operator. 3.明确地拒绝一个 class object指定给另一个 class object. 如果要选择第3点,不允许将一个 class object指定给另一个 class object,那么只要

【转】JavaScript中的对象复制(Object Clone)

JavaScript中并没有直接提供对象复制(Object Clone)的方法.因此下面的代码中改变对象b的时候,也就改变了对象a. a = {k1:1, k2:2, k3:3}; b = a; b.k2 = 4; 如果只想改变b而保持a不变,就需要对对象a进行复制. 用jQuery进行对象复制 在可以使用jQuery的情况下,jQuery自带的extend方法可以用来实现对象的复制. a = {k1:1, k2:2, k3:3}; b = {}; $.extend(b,a); 自定义clone

笔记——JS的对象复制

JS的对象复制-- Js的Number类型和String类型都不是地址引用,而是重新创建对象复制值:var a = 1;var b = a;b = 2;alert(a);结果:1 var c = "abc";var d = c;d = "def";alert(c);结果:abc 只有对象类型才是地址引用的:var a = {x:1};var b = a;b.x = 2;alert(a.x);结果:2 所以复制对象不要用"=",而是遍历对象复制对象

通过反射克隆对象,对象复制(克隆)工具类

最近做的项目中,经常会遇到用视图来操作数据库的,但是页面需要的则是某个实体对象,在controller层查出list<view> 还要把将view对象转化成entity对象.需要写一大堆的get和set方法,而且如果实体增删字段的话,还需要把转化代码再修改一下,让人头疼. 当我需要操作一个实体对象完成两件不同的事情,这2个方法中会修改实体对象中的属性,第一个方法调用后,再调用第二个方法时,会受影响.为了保证不受影响,必须copy一份属性值一模一样的实体.这时候就需要一个工具类来完成了. 本着磨

Java反射 - 2(对象复制,父类域)

为什么要复制对象?假设有个类Car,包含name,color2个属性,那么将car1对象复制给car2对象,只需要car2.setName(car1.getName)与car2.setColor(car1.getColor)两部操作即可. 实际项目中有很多类都有超过几十个,甚至上百个字段,这时如果采用以上方式,将会有很大的代码工作量与重复劳动.解决方法是使用反射机制. 首先有2个类如下 1 /** 2 * Created by yesiming on 16-11-19. 3 */ 4 publi

通过反射克隆对象,对象复制(克隆),对象合并工具类 升级版

先上代码,有时间再详说: package com.kaiyuan.common.util; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 通用对象co

关于delete和对象复制

本码农的惯例,开篇废话几句... 前天小生又被虐了... 没办法,作为一个资深code user,我用代码的能力,解决问题的能力自问是不弱的... 但是自身的前端基础说实话还是不过硬,最明显的表现就是,对于JS核心的研究做得比较少. 另外就是概念方面很脆弱(PS:我的习惯是用通俗的比喻来理解技术,那些乏味的概念实在记不住几个) 现实依旧一如既往的残酷,许多平时用的很少的知识点经常被用作体现一个人能力水平的指标. 其实也是合理的,毕竟用的少就不去研究,这是说不过去的. OK,废话完毕,开始正题.

JS对象复制

在JavaScript很多人复制一个对象的时候都是直接用"=",因为大家都觉得脚本语言是没有指针.引用.地址之类的,所以直接用"="就可以把一个对象复制给另外一个对象,如下代码: var i1 = 1; var i2 = i1; i2 = 2; alert("i1:"+i1+",i2:"+i2); 输出结果:i1:1 , i2:2 但可能没有发现,这种“复制”用在对象(object)类型是“错误”的,因为这只是把对象的地址复制