第五节--克隆


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 相关文章推荐
把从SQL中取出的数据转化成XMl格式
Oct 09 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
Dec 07 PHP
PHP中设置时区,记录日志文件的实现代码
Jan 07 PHP
php实现查询百度google收录情况(示例代码)
Aug 02 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
set_exception_handler函数在ThinkPHP中的用法
Oct 31 PHP
php去除html标记的原生函数详解
Jan 27 PHP
php递归删除指定文件夹的方法小结
Apr 20 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
Aug 15 PHP
PHP多维数组排序array详解
Nov 21 PHP
PHP FileSystem 文件系统常用api整理总结
Jul 12 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
PHP中Date()时间日期函数的使用方法小结
2011/04/20 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
vue-resource:jsonp请求百度搜索的接口示例
2019/11/09 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
教你用Python写安卓游戏外挂
2018/01/11 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
如何基于Python创建目录文件夹
2019/12/31 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
证婚人搞笑证婚词
2014/01/10 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
特岗教师个人总结
2015/02/10 职场文书
趣味运动会口号
2015/12/24 职场文书
python热力图实现的完整实例
2022/06/25 Python