第五节--克隆


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中与数组相关的函数
Mar 22 PHP
php gzip压缩输出的实现方法
Apr 27 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
ThinkPHP模板判断输出Present标签用法详解
Jun 30 PHP
PHP、Java des加密解密实例
Apr 27 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
浅谈php7的重大新特性
Oct 23 PHP
开启PHP的伪静态模式
Dec 31 PHP
PHP数学运算与数据处理实例分析
Apr 01 PHP
CI框架集成Smarty的方法分析
May 17 PHP
PHP 7.1新特性的汇总介绍
Dec 16 PHP
laravel框架使用阿里云短信发送消息操作示例
Feb 15 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微信支付接口开发程序
2016/08/02 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
puppeteer库入门初探
2019/01/09 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
python中删除某个元素的方法解析
2019/11/05 Python
Python configparser模块应用过程解析
2020/08/14 Python
css3实现顶部社会化分享按钮示例
2014/05/06 HTML / CSS
惠而浦美国官网:Whirlpool.com
2021/01/19 全球购物
学生发电厂实习自我鉴定
2013/09/22 职场文书
七年级音乐教学反思
2014/01/26 职场文书
求职信名称怎么写
2014/05/26 职场文书
学习三严三实心得体会
2014/10/13 职场文书
民主评议党员总结
2014/10/20 职场文书
暑假打工感想
2015/08/07 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS