<?php
/**
* 此例子解释什么是深克隆。
* 克隆学生类。
*/
class Student { public $name = '张三';
public $age = 12; //所属老师
public $teacher; //构造方法
public function __construct( $name , Teacher $teacher) {
$this->name = $name;
$this->teacher = $teacher;
} // 克隆方法
// 对新对象,进行一系列的初始化操作,比如将原来的年龄改为2,将老师对象,更新为新的老师对象。
// 操作的不是原始对象,而是复制出的新对象
public function __clone() {
$this->age = 2; //复制原有的老师对象,给予新的学生对象中的老师对象。
$this->teacher = clone $this->teacher;
}
} class Teacher {
public $teacherName = '张老师';
} // 实例化学生类
$stu = new Student('张三', new Teacher()); // 复制一个学生类
$stu_back = clone $stu; // 复制过后,将原学生类中的张老师更改为王老师
$stu->teacher->teacherName = '王老师'; // 打印对象
var_dump($stu); echo '<br>'; var_dump($stu_back);

结果:

PHP - __clone 对象克隆的更多相关文章

  1. php -- 魔术方法 之 对象克隆 : __clone()

    产生对象的方法: 1.从类产生对象.new,通过new去堆区开辟一块内存空间 2.从对象产生对象.clone,通过关键字clone,将一个对象完整的复制一份,新开辟一块内存空间,将复制的结果存放到该内 ...

  2. Java提高篇——对象克隆(复制)

    假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...

  3. C#对象克隆介绍

    浅拷贝和深拷贝 有两种对象克隆的方法:浅拷贝和深拷贝.浅拷贝只是复制引用,而不会复制引用的对象.深拷贝会复制引用的对象. 因此,原始对象中的引用和浅拷贝对象中的同一个引用都指向同一个对象.而深拷贝的对 ...

  4. Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨

    Java对象克隆(Clone)及Cloneable接口.Serializable接口的深入探讨 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的克隆,就不得不说为什么 ...

  5. js对象克隆, 深复制.

    亲测有效: //对象克隆 function clone(obj) { // Handle the 3 simple types, and null or undefined if (null == o ...

  6. (转)Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨

    原文地址:http://blog.csdn.net/kenthong/article/details/5758884 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的 ...

  7. Java对象克隆详解

    原文:http://www.cnblogs.com/Qian123/p/5710533.html 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = appl ...

  8. 【java】对象克隆protected Object clone() throws CloneNotSupportedException

    package 对象克隆; class A implements Cloneable{//要具备clone()功能必须要实现Cloneable接口,此接口里无方法,只起标识作用. private St ...

  9. java 浅拷贝和深拷贝 对象克隆clone

    分一下几点讨论: 为什么要克隆? 如何实现克隆 浅克隆和深克隆 解决多层克隆问题 总结 一:为什么要克隆? 大家先思考一个问题,为什么需要克隆对象?直接new一个对象不行吗? 答案是:克隆的对象可能包 ...

随机推荐

  1. thinkphp phpexcel导出

    近期做一个项目涉及到商品信息的批量导出与导入,遂记录了下来,框架是tp框架3.2.3(tp5.0性质是一样的,无非是加载方法与所放目录不一样罢了),运用的是phpexcel,闲话不多说,上代码 1.首 ...

  2. 【Untiy3D 游戏开发之一】Unity3D For Window/Mac最新4.2.0版本破解教程

    转载请标明:转载自[小枫栏目],博文链接:http://blog.csdn.net/rexuefengye/article/details/11646885 一.Unity3D For Mac 1.首 ...

  3. HDU 1001 Sum Problem

    /* 注意可以是负整数,而且在过程中会超过int,所以要用longlong */ #include <cstdio> int main() { long long n; while (sc ...

  4. Ubuntu系统下在Eclipse中使用真实手机运行调试Android应用

    本文是在Ubuntu下已搭建好JRE+Eclipse+AndroidSDK的环境中进行的. 如果从未进行过如下的操作的话,在运行Android应用时,在设备选择器那里你的手机会显示为一大串" ...

  5. 配置hibernate数据库连接

    第一步:右键项目->MyEclipse->添加Hibernate组件,指定数据库连接配置如下(src/hibernate.cfg.xml) MySQL对连接的有效期是28800s,一个连接 ...

  6. IT忍者神龟之Struts2.xml配置全然正确流程能走通可是有红叉解决

    一:Multiple annotations found at this line:Undefined actionName  parameter  Undefined actionnamespace ...

  7. POJ 1236 Network of Schools(强连通 Tarjan+缩点)

    POJ 1236 Network of Schools(强连通 Tarjan+缩点) ACM 题目地址:POJ 1236 题意:  给定一张有向图,问最少选择几个点能遍历全图,以及最少加入�几条边使得 ...

  8. 一些常用的Intent及intent-filter的信息

    Uri Action 功能 备注 geo:latitude,longitude Intent.ACTION_VIEW 打开地图应用程序并显示指定的经纬度   geo:0,0?q=street+addr ...

  9. 第10季asp.net基础

    什么是ASP.Net: ASP.Net是一种动态网页技术,在服务器端运行.Net代码,动态生成HTML.可以使用javascript.Dom在浏览器端完成很多工作,但是有很多工作无法在浏览器端完成,比 ...

  10. JavaSE学习总结第05天_Java语言基础1

      05.01 方法概述和格式说明 简单的说:方法就是完成特定功能的代码块 在很多语言里面都有函数的定义,函数在Java中被称为方法 格式: 修饰符返回值类型方法名(参数类型参数名1,参数类型参数名2 ...