第五节 克隆 [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 25 PHP
php获取地址栏信息的代码
Oct 08 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
May 03 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
Jul 01 PHP
thinkphp四种url访问方式详解
Nov 28 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
Jan 28 PHP
Composer设置忽略版本匹配的方法
Apr 27 PHP
php实现留言板功能(会话控制)
May 23 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 PHP
PHP操作Redis常用技巧总结
Apr 24 PHP
PHP微信H5支付开发实例
Jul 25 PHP
PHP5.5新特性之yield理解与用法实例分析
Jan 11 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
php运行时动态创建函数的方法
2015/03/16 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
关于this和self的使用说明
2010/08/01 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
django 自定义用户user模型的三种方法
2014/11/18 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
python flask实现分页效果
2017/06/27 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
项目副经理岗位职责
2013/12/30 职场文书
住宅质量保证书
2014/04/29 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
公司慰问信范文
2015/03/23 职场文书
会计求职自荐信
2015/03/26 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
讲文明倡议书
2015/04/29 职场文书
redis实现排行榜功能
2021/05/24 Redis
Golang日志包的使用
2022/04/20 Golang
python神经网络 使用Keras构建RNN训练
2022/05/04 Python
Rust中的Struct使用示例详解
2022/08/14 Javascript