第五节--克隆


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 相关文章推荐
WordPress判断用户是否登录的代码
Mar 17 PHP
PHP通过正则表达式下载图片到本地的实现代码
Sep 19 PHP
PHP详解ASCII码对照表与字符转换
Dec 05 PHP
php的数组与字符串的转换函数整理汇总
Jul 18 PHP
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
使用配置类定义Codeigniter全局变量
Jun 12 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
Nov 19 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
Mar 21 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
May 12 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
php实现微信原生支付(扫码支付)功能
May 30 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
Win下如何安装PHP的APC拓展
2013/08/07 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
通过下拉框的值来确定输入框是否可以为空的代码
2011/10/18 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
2020/04/17 Javascript
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
在Linux下调试Python代码的各种方法
2015/04/17 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
图文详解WinPE下安装Python
2016/05/17 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
德国童装购物网站:NICKI´S.com
2018/04/20 全球购物
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
什么样的创业计划书可行性高?
2014/02/01 职场文书
网络优化专员求职信
2014/05/04 职场文书
建筑安全标语
2014/06/07 职场文书
生物学专业求职信
2014/07/23 职场文书
合作经营协议书范本
2014/09/16 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
2014年仓管员工作总结
2014/11/18 职场文书
社会实践活动总结格式
2015/05/11 职场文书
反邪教教育心得体会
2016/01/15 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python