第五节--克隆


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 相关文章推荐
在Windows中安装Apache2和PHP4的权威指南
Oct 09 PHP
php MySQL与分页效率
Jun 04 PHP
php 引用(&amp;)详解
Nov 20 PHP
用C/C++扩展你的PHP 为你的php增加功能
Sep 06 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
Oct 06 PHP
php Xdebug的安装与使用详解
Jun 20 PHP
Laravel路由研究之domain解决多域名问题的方法示例
Apr 04 PHP
Laravel开启跨域请求的方法
Oct 13 PHP
如何在centos8自定义目录安装php7.3
Nov 28 PHP
详解PHP中的8个魔术常量
Jul 06 PHP
PhpStorm+xdebug+postman调试技巧分享
Sep 15 PHP
PHP正则表达式之RCEService回溯
Apr 11 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
Syphon 秘笈
2021/03/03 冲泡冲煮
PHP排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
php四种定界符详解
2017/02/16 PHP
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
js的回调函数详解
2015/01/05 Javascript
nodejs导出excel的方法
2015/06/30 NodeJs
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
js实现日历与定时器
2017/02/22 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
利用python获得时间的实例说明
2013/03/25 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
Python机器学习logistic回归代码解析
2018/01/17 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
python实现排序算法解析
2018/09/08 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
python中xlutils库用法浅析
2020/12/29 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
类和结构的区别
2012/08/15 面试题
思想品德自我评价
2014/02/04 职场文书
食品安全工作实施方案
2014/03/26 职场文书
医学生求职信
2014/07/01 职场文书
机械操作工岗位职责
2014/08/08 职场文书
庆祝教师节标语
2014/10/09 职场文书
五好家庭事迹材料
2014/12/20 职场文书
小学少先队活动总结
2015/05/08 职场文书
党小组鉴定意见
2015/06/02 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书