第五节--克隆


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或asp创建网页桌面快捷方式的代码
Mar 23 PHP
php5.3 注意事项说明
Jul 01 PHP
php switch语句多个值匹配同一代码块的实现
Mar 03 PHP
php防止sql注入简单分析
Mar 18 PHP
php创建桌面快捷方式实现方法
Dec 31 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
Mar 02 PHP
Symfony2实现从数据库获取数据的方法小结
Mar 18 PHP
joomla组件开发入门教程
May 04 PHP
php封装的page分页类完整实例
Oct 18 PHP
php实现的简单中文验证码功能示例
Jan 03 PHP
PHP+RabbitMQ实现消息队列的完整代码
Mar 20 PHP
Laravel 实现关系模型取出需要的字段
Oct 10 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/03 冲泡冲煮
php项目打包方法
2008/02/18 PHP
php flush类输出缓冲剖析
2008/10/19 PHP
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
通达OA公共代码 php常用检测函数
2011/12/14 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
jQuery点击其他地方时菜单消失的实现方法
2016/04/22 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
go语言计算两个时间的时间差方法
2015/03/13 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
Python装饰器语法糖
2019/01/02 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
python已协程方式处理任务实现过程
2019/12/27 Python
python 递归相关知识总结
2021/03/03 Python
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
餐饮收银员岗位职责
2014/02/07 职场文书
黄金搭档广告词
2014/03/21 职场文书
优秀纪检干部材料
2014/08/27 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
我是特种兵观后感
2015/06/11 职场文书
新郎新娘致辞
2015/07/31 职场文书
高三数学教学反思
2016/02/18 职场文书