第五节--克隆


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 相关文章推荐
php下实现伪 url 的超简单方法[转]
Sep 24 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
解析crontab php自动运行的方法
Jun 24 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 PHP
PHP入门经历和学习过程分享
Apr 11 PHP
php使用CURL伪造IP和来源实例详解
Jan 15 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
Mar 18 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
Aug 02 PHP
PHP 枚举类型的管理与设计知识点总结
Feb 13 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 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
PHP 高手之路(三)
2006/10/09 PHP
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
php不用正则验证真假身份证
2013/11/06 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
Laravel框架源码解析之入口文件原理分析
2020/05/14 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
javascript中关于执行环境的杂谈
2011/08/14 Javascript
jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)
2012/03/21 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
Python模块WSGI使用详解
2018/02/02 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
Django单元测试中Fixtures的使用方法
2020/02/26 Python
Joseph官网:英国小众奢侈品牌
2019/05/17 全球购物
气象学专业个人求职信
2014/04/22 职场文书
群众路线自查报告及整改措施
2014/11/04 职场文书
基层党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
营销计划书
2015/01/17 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers