第五节--克隆


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 图片上传实现代码 带详细注释
Apr 29 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
php pki加密技术(openssl)详解
Jul 01 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
PHP实现的迷你漂流瓶
Jul 29 PHP
YII Framework框架教程之缓存用法详解
Mar 14 PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 PHP
又拍云异步上传实例教程详解
Apr 19 PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 PHP
PHP常用的三种设计模式
Feb 17 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 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 中文字符串首字母的获取函数分享
2013/11/04 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
php根据命令行参数生成配置文件详解
2019/03/15 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
jQuery 使用手册(四)
2009/09/23 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
JS数字抽奖游戏实现方法
2015/05/04 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
js 打开新页面在屏幕中间的实现方法
2016/11/02 Javascript
如何制作幻灯片(代码分享)
2017/01/06 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
关于在mongoose中填充外键的方法详解
2017/08/14 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
python学习笔记:字典的使用示例详解
2014/06/13 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
python实现手势识别的示例(入门)
2020/04/15 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
英国领先的男士服装和时尚零售商:Burton
2017/01/09 全球购物
集团财务总监岗位职责
2015/04/03 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
一文帮你理解PReact10.5.13源码
2021/04/03 Javascript