首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

php之clone 复制对象以及__clone魔术方法

那么我们如果想要把这个值不守clone出来的对象的值影响该怎么办呢? 那么在这里我们只需要在此clone一下这个成员变量就好了,该如何clone了?...那么把我们的成员变量在__clone方法里面clone一下就好了,如下代码演示: 注:clone只能用于对象克隆,对象复制。记住,如果你clone一个非对象变量将会报错no obj。。。...以下例子是我从网上找的一个例子,感觉不错,这里将用这个例子来讲解魔法方法__clone的使用: 本来这个是没有注释的,我顺便把解释丢到了里面,这样强制clone后就不会指向原来的对象了。 <?...php class testClass { public $str_data;//这里是一个非对象类型 public $obj_data;//在这里这是一个对象,可以看下面将会给一个对象给他 //...使用clone的时候触发 public function __clone() { $this->obj_data = clone $this->obj_data;//这个对象将会被克隆,会被强制复制

90910

PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析

本文实例讲述了PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法。...分享给大家供大家参考,具体如下: 1.对象克隆 clone PHP4面向对象功能一个很大的缺点,是将对象视为另一种数据类型,这使得很多常见的OOP方法无法使用,如设计模式。...可以在对象前面加clone关键字来克隆对象,如下: destinationObject = clone targetObject; 克隆对象: <?...2.魔术方法__clone() 在上面的程序中一共创建了两个对象,其中有一个对象是通过clone关键字克隆出来的副本。两个对象完全能独立,但他们中的成员及属性的值完全一样。...__clone()方法不需要任何参数。将上例中的代码改写一下,在类中添加魔术方法__clone(),为副本对象中的成员属性重新初始化。 <?

39010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java 通过Object的clone复制对象

    java 通过Object的clone复制对象 需求背景 对象的克隆是指创建一个新的对象,且新的对象的状态与原始对象的状态相同。当对克隆的新对象进行修改时,不会影响原始对象的状态。...要想对一个对象进行复制,就需要对clone方法覆盖。...同时只有类的对象自己可以克隆自己,所以对象类必须实现Cloneable接口才可以使用obj.clone()方法, 首先,如果这个对象的类不实现接口{@code Cloneable},然后{@code...浅复制,clone()内部类似于创建一个新的对象并把对象中相应的字段通过赋值给新的对象,而引用数据类型的内容本身并不是克隆的,因此这种复制就叫浅复制。...到这里基本问题都解决了,但是还可能会遇到一个问题,就是当前对象中有很多引用对象,这样的话通过clone的方法处理起来会比较麻烦,这是可以采用另外一种方式,序列化的方式来实现对象的深复制。

    9410

    Java基础篇:对象拷贝:clone方法 以及 序列化

    b:深拷贝(深克隆):深拷贝把要复制的对象所引用的对象都复制了一遍。 一、clone方法浅拷贝问题: Java中对象的克隆,为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。...2.在派生类的clone()方法中,调用super.clone()。  3.在派生类中实现Cloneable接口。 ...其实出现问题的关键就在于clone()方法上面,我们知道clone()方法是使用Object类的clone()方法,但是该方法存在一个缺陷,他并不会将对象的所有属性全部拷贝过来,而是有选择性的拷贝,基本规则如下...对于这种情况我们还是可以解决的,只需要在clone()方法里面新建一个对象,然后张三引用该对象即可(深拷贝): protected Person clone() { Person person...对于上面的解决方案还是存在一个问题,若我们系统中存在大量的对象是通过拷贝生成的,如果我们每一个类都写一个clone()方法,并将还需要进行深拷贝,新建大量的对象,这个工程是非常大的,这里我们可以利用序列化来实现对象的拷贝

    77420

    读书笔记--浅clone与深clone

    ,不管修改哪一个对象,都会影响另一个对象 namespace CloneTest { class Program     { static void Main(string[] args)         ...之后,修改clone对象将影响source对象");             Console.WriteLine("-------------------------------------------...() { return MemberwiseClone();         }     } } 深克隆示例: 要点:深克隆要求完成克隆后,不管如何设置克隆出的新对象,都不会影响源对象(即新旧对象完全不相干...之后,修改clone对象不影响source对象");             Console.WriteLine("-------------------------------------------...());编译通不过--提示Student没有Clone方法,所以换成了这个             }         } public object Clone() { return new Enrollment

    95260

    java clone

    简介 实现Cloneable接口的类才可以被克隆,如果不实现该接口,调用Object clone方法会报CloneNotSupportedException: InvokingObject's clone...分类 浅克隆 指拷贝对象时仅拷贝对象本身中的基本变量,而不拷贝对象包含的引用指向的对象 深克隆 不仅拷贝对象本身中的基本变量,而且还拷贝对象中包含的引用指向的所有对象 说明 package com.lios.clone...3321889 p:Worker:name:workp p1:Worker:name:workp p2:Worker:name:workp p:cc p1:cc p2:lios 发现p,p1所有的值都是一致的,当对象...Object clone() throws CloneNotSupportedException { Person p = (Person) super.clone();...上面就是深克隆 总结 对象clone必须实现Cloneable接口 深克隆需拷贝对象中包含的引用指向的所有对象

    67320

    Java的clone()方法

    Java的clone()方法   ⑴clone方法将对象复制了一份并返回给调用者。一般而言,clone()方法满足: ①对任何的对象x,都有x.clone() !...=x//克隆对象与原对象不是同一个对象 ②对任何的对象x,都有x.clone().getClass()= =x.getClass()//克隆对象与原对象的类型一样 ③如果对象x的equals()方法定义恰当...⑵Java中对象的克隆 ①为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。 ②在派生类中覆盖基类的clone()方法,并声明为public。...覆盖Object中的clone方法, 实现深复制   现在为了要在clone对象时进行深复制, 那么就要Clonable接口,覆盖并实现clone方法,除了调用父类中的clone方法得到新的对象, 还要将该类中的引用变量也...clone出来。

    39500

    Java中的clone

    Java中对象的创建 使用new操作符创建一个对象 使用clone方法复制一个对象 那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。...而clone在第一步是和new相似的, 都是分配内存,调用clone方法时,分配的内存和源对象(即调用clone方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone...Java中的Clone clone 顾名思义就是 复制 , 在Java语言中, clone方法被对象调用,所以会复制对象。...clone是浅拷贝还是深拷贝 如果两个Person对象的name的地址值相同, 说明两个对象的name都指向同一个String对象, 也就是浅拷贝, 而如果两个对象的name的地址值不同, 那么就说明指向不同的..."clone是浅拷贝的":"clone是深拷贝的"; 打印结果: clone是浅拷贝的

    61030

    初识Object的clone()

    user = " + clone); } } 好像跟他说的不一样呀,浅拷贝对象内容也不一样了,问题出在哪里呢?...= " + person); System.out.println("clone = " + clone); } } 从这可以发现,对于拷贝的对象,我分别修改了基本类型和引用类型的内容...,基本类型的值是只修改了拷贝对象的内容,源对象的内容值不会跟着改变;但是修改引用类型的值,会将源对象的也一起改变。...深拷贝(Deep Clone) 对基本数据类型进行值传递,为数据类型创建一个新的对象,并且复制其内容的拷贝。 将上面的代码进行修改: 重写Object类的clone()方法。...= " + person); System.out.println("clone = " + clone); } } 结果: 发现的确是复制了引用类型的内容,克隆对象与源对象内容的值互不干扰

    43120

    git clone指定分支

    Git Clone 首先看一下如果我们按照常规的操作去拉取一个Gitee的代码仓,是什么样的效果: $ git clone https://gitee.com/mindspore/mindscience.git...objects: 100% (83/83), done. remote: Total 2884 (delta 21), reused 46 (delta 9), pack-reused 2787 接收对象中...这样的操作是比较麻烦的,特别是有时我们就只需要其中某一个特定的分支,那我们就可以按照下面的步骤来进行,在clone时就加上-b branch_name的操作,就可以指定分支进行拉取: $ git clone...objects: 100% (83/83), done. remote: Total 2884 (delta 21), reused 46 (delta 9), pack-reused 2787 接收对象中...而我们只需要在clone的指令加上一条配置,就可以直接指定分支进行拉取,方便后续的操作。

    2.4K10

    企业面试题: JavaScript中如何对一个对象进行深度clone

    考核内容: js中对象的深度克隆(校招中总会考到) 题发散度: ★★★★★ 试题难度: ★★★★ 解题思路: 谈到对象的克隆,必定要说一下对象的概念。...好了既然对象分为这两类,这两种类型在复制克隆的时候是有很大区别的。原始类型存储的是对象的实际数据,而对象类型存储的是对象的引用地址(对象的实际内容单独存放,为了减少数据开销通常存放在内存中)。...但是对于对象的类型则不然 ? 通过上面的代码,大家能看到,经过对象克隆以后,我修改arr2,发现原对象arr也被修改了。这说明对象的克隆不够彻底,那也就是说深度克隆失败,才出现下面所说的内容。...深度克隆:所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中。...从上面的代码可以看到,深度克隆的对象可以完全脱离原对象,我们对新对象的任何修改都不会反映到原对象中,这样深度克隆就实现了。

    1.2K40

    php5对象复制、clone、浅复制与深复制实例详解

    本文实例讲述了php5对象复制、clone、浅复制与深复制。...用clone(克隆)来复制对象 我们现在使用PHP5的clone语言结构来复制对象,代码如下: PHP代码 $tv1 = new Television(); $tv2 = clone $tv1; echo...那么__clone魔术方法就是专门用来解决这样的问题,__clone魔术方法会在对象被复制( 也就是clone操作)的时候被触发。...由此可见,clone操作有这么一个非常大的缺陷:使用clone操作复制对象时,当被复制的对象有对其它对象的引用的时候,引用的对象将不会被复制。...方案1:用__clone魔术方法弥补 前面我们已经介绍了__clone魔术方法的用法,我们可以在__clone方法中将被复制对象中其它对象的引用重新引用到一个新的对象

    1.2K50
    领券