第五节--克隆


Posted in PHP onNovember 16, 2006

/*
+-------------------------------------------------------------------------------+
| = 本文为Haohappy读<<Core PHP Programming>> 
| = 中Classes and Objects一章的笔记 
| = 翻译为主+个人心得 
| = 为避免可能发生的不必要的麻烦请勿转载,谢谢 
| = 欢迎批评指正,希望和所有PHP爱好者共同进步! 
| = PHP5研究中心: http://blog.csdn.net/haohappy2004
+-------------------------------------------------------------------------------+
*/

第五节--克隆

PHP5中的对象模型通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本 . 为了这样的目的,PHP定义了一个特殊的方法,称为__clone. 像__construct和__destruct一样,前面有两个下划线.

默认地,用__clone方法将建立一个与原对象拥有相同属性和方法的对象. 如果你想在克隆时改变默认的内容,你要在__clone中覆写(属性或方法).

克隆的方法可以没有参数,但它同时包含this和that指针(that指向被复制的对象). 如果你选择克隆自己,你要小心复制任何你要你的对象包含的信息,从that到this. 如果你用__clone来复制. PHP不会执行任何隐性的复制, 

下面显示了一个用系列序数来自动化对象的例子:

<?php   
   class ObjectTracker //对象跟踪器   
   {   
       private static $nextSerial = 0;   
       private $id;   
       private $name;          function __construct($name) //构造函数   
       {   
           $this->name = $name;   
           $this->id = ++self::$nextSerial;   
       }   
       function __clone()  //克隆   
       {   
           $this->name = "Clone of $that->name";   
           $this->id = ++self::$nextSerial;   
       }   
       function getId() //获取id属性的值   
       {   
           return($this->id);   
       }   
       function getName() //获取name属性的值   
       {   
           return($this->name);   
       }   
   }   
   $ot = new ObjectTracker("Zeev's Object");   
   $ot2 = $ot->__clone();   
   //输出: 1 Zeev's Object   
   print($ot->getId() . " " . $ot->getName() . "<br>");   
   //输出: 2 Clone of Zeev's Object   
   print($ot2->getId() . " " . $ot2->getName() . "<br>");   
?>  
PHP 相关文章推荐
多文件上载系统完整版
Oct 09 PHP
PHP MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 PHP
php全局变量和类配合使用深刻理解
Jun 05 PHP
PHP使用json_encode函数时不转义中文的解决方法
Nov 12 PHP
php+ajax实时刷新简单实例
Feb 25 PHP
PHP获取某个月最大天数(最后一天)的方法
Jul 29 PHP
WordPress中获取指定分类及其子分类下的文章数目
Dec 31 PHP
深入浅析用PHP实现MVC
Mar 02 PHP
php模拟post上传图片实现代码
Jun 24 PHP
PHP中函数gzuncompress无法使用的解决方法
Mar 02 PHP
PHP验证类的封装与使用方法详解
Jan 10 PHP
对laravel in 查询的使用方法详解
Oct 09 PHP
第四节--构造函数和析构函数
Nov 16 #PHP
第三节--定义一个类
Nov 16 #PHP
第二节--PHP5 的对象模型
Nov 16 #PHP
第一节--面向对象编程
Nov 16 #PHP
MYSQL数据库初学者使用指南
Nov 16 #PHP
php.ini 中文版
Oct 28 #PHP
一个可以找出源代码中所有中文的工具
Oct 25 #PHP
You might like
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
PHP正则验证Email的方法
2015/06/15 PHP
java解析json方法总结
2019/05/16 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
Three.js基础学习之场景对象
2017/09/27 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
JavaScript监听一个DOM元素大小变化
2020/04/26 Javascript
python flask 多对多表查询功能
2017/06/25 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
python如何制作缩略图
2019/04/30 Python
Python sublime安装及配置过程详解
2020/06/29 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
《诚实与信任》教学反思
2014/04/10 职场文书
地球物理学专业推荐信
2014/09/08 职场文书
四年级小学生评语
2014/12/26 职场文书
2016年情人节问候语
2015/11/11 职场文书
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android