第五节--克隆


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简介
Oct 09 PHP
收藏的PHP常用函数 推荐收藏保存
Feb 21 PHP
PHPEXCEL 使用小记
Jan 06 PHP
解析php入库和出库
Jun 25 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
php中数字0和空值的区别分析
Jun 05 PHP
php生成图片验证码
Jun 09 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
PHP 获取ip地址代码汇总
Jul 05 PHP
Yii实现的多级联动下拉菜单
Jul 13 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
浅谈php调用python文件
Mar 29 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 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
PHP把小数转成整数3种方法
2014/06/30 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
AngularJS基础知识
2014/12/21 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
深入理解javascript中的this
2021/02/08 Javascript
详解python的数字类型变量与其方法
2016/11/20 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
Vivo俄罗斯官方在线商店:中国智能手机品牌
2019/10/04 全球购物
一套SQL笔试题
2016/08/14 面试题
学生会主席事迹材料
2014/01/28 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
煤矿安全生产责任书
2014/04/15 职场文书
羽毛球社团活动总结
2014/06/27 职场文书
党员志愿者活动方案
2014/08/28 职场文书
群众路线专项整治方案
2014/10/27 职场文书
2015元旦节寄语
2014/12/08 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
小学语文教师研修日志
2015/11/13 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书