第五节 克隆 [5]


Posted in PHP onOctober 09, 2006

PHP5中的对象模型通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本 . 为了这样的目的,PHP定义了一个特殊的方法,称为__clone. 像__construct和__destruct一样,前面有两个下划线.

默认地,用__clone方法将建立一个与原对象拥有相同属性和方法的对象. 如果你想在克隆时改变默认的内容,你要在__clone中覆写(属性或方法).

克隆的方法可以没有参数,但它同时包含this和that指针(that指向被复制的对象). 如果你选择克隆自己,你要小心复制任何你要你的对象包含的信息,从that到this. 如果你用__clone来复制. PHP不会执行任何隐性的复制,

下面显示了一个用系列序数来自动化对象的例子:  <?php
class ObjectTracker file://对象跟踪器
{
private static $nextSerial = 0;
private $id;
private $name;

function __construct($name) file://构造函数
{
$this->name = $name;
$this->id = ++self::$nextSerial;
}

function __clone() file://克隆
{
$this->name = "Clone of $that->name";
$this->id = ++self::$nextSerial;
}

function getId() file://获取id属性的值
{
return($this->id);
}

function getName() file://获取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类
Nov 27 PHP
php 阴历-农历-转换类代码
Jan 16 PHP
如何用PHP实现插入排序?
Apr 10 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
Jul 03 PHP
PHP命名空间(Namespace)简明教程
Jun 11 PHP
PHP面试常用算法(推荐)
Jul 22 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
PHP实现一个多功能购物网站的案例
Sep 13 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
Dec 12 PHP
第六节 访问属性和方法 [6]
Oct 09 #PHP
第八节 访问方式 [8]
Oct 09 #PHP
第九节 绑定 [9]
Oct 09 #PHP
第十节 抽象方法和抽象类 [10]
Oct 09 #PHP
Extended CHM PHP 语法手册之 DIY
Oct 09 #PHP
使用PHP制作新闻系统的思路
Oct 09 #PHP
一个oracle+PHP的查询的例子
Oct 09 #PHP
You might like
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
JsRender for object语法简介
2014/10/31 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
Nodejs 获取时间加手机标识的32位标识实现代码
2017/03/07 NodeJs
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
Vue中JS动画与Velocity.js的结合使用
2019/02/13 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
小程序如何获取多个formId实现详解
2019/09/20 Javascript
小程序实现录音功能
2020/09/22 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
Django Celery异步任务队列的实现
2019/07/24 Python
基于python中__add__函数的用法
2019/11/25 Python
python获取array中指定元素的示例
2019/11/26 Python
Python 如何展开嵌套的序列
2020/08/01 Python
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
行政助理的岗位职责
2014/02/18 职场文书
计算机专业毕业生自荐信范文
2014/03/06 职场文书
股权转让协议范本
2014/12/07 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
何玥事迹观后感
2015/06/16 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
Python Pygame实战之塔防游戏的实现
2022/03/17 Python
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
golang定时器
2022/04/14 Golang