第五节--克隆


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获取网页内容方法总结
Dec 04 PHP
PHP CLI模式下的多进程应用分析
Jun 03 PHP
php获取操作系统语言代码
Nov 04 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
Nov 12 PHP
Laravel框架路由配置总结、设置技巧大全
Sep 03 PHP
joomla数据库操作示例代码
Jan 06 PHP
中高级PHP程序员应该掌握哪些技术?
Sep 23 PHP
yii2 数据库读写分离配置示例
Feb 10 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
Aug 21 PHP
PHP的介绍以及优势详细分析
Sep 05 PHP
php写入mysql中文乱码的实例解决方法
Sep 17 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/06/03 PHP
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
php中filter_input函数用法分析
2014/11/15 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
JS在IE下缺少标识符的错误
2014/07/23 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
2016/11/06 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
python 调用win32pai 操作cmd的方法
2017/05/28 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
python求前n个阶乘的和实例
2020/04/02 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
eharmony澳大利亚:网上约会服务
2020/02/29 全球购物
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
回门宴父母答谢词
2014/01/26 职场文书
大学国际贸易专业自荐信
2014/06/05 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
Python django中如何使用restful框架
2021/06/23 Python
python实现简单石头剪刀布游戏
2021/10/24 Python
python中的3种定义类方法
2021/11/27 Python