第五节--克隆


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 相关文章推荐
PHP5中使用DOM控制XML实现代码
May 07 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
May 10 PHP
php使用glob函数快速查询指定目录文件的方法
Nov 15 PHP
php实现Session存储到Redis
Nov 11 PHP
学习php设计模式 php实现状态模式
Dec 07 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
php中通过eval实现字符串格式的计算公式
Mar 18 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 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 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
mysql数据库差异比较的PHP代码
2012/02/05 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
语义化 H1 标签
2008/01/14 Javascript
javascript学习(一)构建自己的JS库
2013/01/02 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
JavaScript实现的文本框placeholder提示文字功能示例
2018/07/25 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
简单谈谈Python中的json与pickle
2017/07/19 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
计算机通信专业推荐信
2014/02/22 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
领导干部作风建设总结
2014/10/23 职场文书
2014年保育员工作总结
2014/12/02 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
创业计划书之面包店
2019/09/17 职场文书