第五节--克隆


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 相关文章推荐
提取HTML标签
Oct 09 PHP
PHP安全配置
Dec 06 PHP
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 PHP
ThinkPHP实现支付宝接口功能实例
Dec 02 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
php 数组字符串搜索array_search技巧
Jul 05 PHP
PHP实现链式操作的原理详解
Sep 16 PHP
PHP微信公众号开发之微信红包实现方法分析
Jul 14 PHP
php+redis实现商城秒杀功能
Nov 19 PHP
php微信公众号开发之现金红包
Apr 16 PHP
Laravel中错误与异常处理的用法示例
Sep 16 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自动获取目录下的模板的代码
2010/08/08 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
php使用数组填充下拉列表框的方法
2015/03/31 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
flash 得到自身url参数的代码
2009/11/15 Javascript
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
2013/01/11 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
大学生的网上创业计划书
2013/12/31 职场文书
教师个人自我评价范文
2014/04/13 职场文书
团结演讲稿范文
2014/05/23 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
先进党支部事迹材料
2014/12/24 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
公司年夜饭通知
2015/04/25 职场文书
法人代表资格证明书
2015/06/18 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
Anaconda配置各版本Pytorch的实现
2021/08/07 Python
Python实现简单的俄罗斯方块游戏
2021/09/25 Python