第五节--克隆


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仿discuz分页效果代码
Oct 02 PHP
Cannot modify header information错误解决方法
Oct 08 PHP
php 攻击方法之谈php+mysql注射语句构造
Oct 30 PHP
PHP开启gzip页面压缩实例代码
Mar 11 PHP
js代码实现微博导航栏
Jul 30 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
PHP附件下载中文名称乱码的解决方法
Dec 17 PHP
非常实用的php验证码类
May 15 PHP
php处理单文件、多文件上传代码分享
Aug 24 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
Oct 22 PHP
浅析php如何实现爬取数据原理
Sep 27 PHP
php转换上传word文件为PDF的方法【基于COM组件】
Jun 10 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多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
2013/11/14 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
2017/12/05 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
在MAC上搭建python数据分析开发环境
2016/01/26 Python
Python 调用Java实例详解
2017/06/02 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
如何定义TensorFlow输入节点
2020/01/23 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
Django admin组件的使用
2020/10/24 Python
python代码实现猜拳小游戏
2020/11/30 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
小学数学教学经验交流材料
2014/05/22 职场文书
学校个人对照检查材料
2014/08/26 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫