第五节 克隆 [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网页游戏学习之Xnova(ogame)源码解读(五)
Jun 23 PHP
CI框架学习笔记(二) -入口文件index.php
Oct 27 PHP
一个经典的PHP文件上传类分享
Nov 18 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
Thinkphp中的curd应用实用要点
Jan 04 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
Jan 09 PHP
php 读取输出其他文件的实现方法
Jul 26 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
Sep 21 PHP
php版微信返回用户text输入的方法
Nov 14 PHP
redirect_uri参数错误的解决方法(必看)
Feb 16 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
Aug 15 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 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
php中防止SQL注入的最佳解决方法
2013/04/25 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
php调整服务器时间的方法
2015/04/03 PHP
我整理的PHP 7.0主要新特性
2016/01/07 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
2016/03/06 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
python使用Matplotlib画饼图
2018/09/25 Python
python同步两个文件夹下的内容
2019/08/29 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
StudentUniverse英国:学生航班、酒店和旅游
2019/08/25 全球购物
酒店管理专业学生求职信
2013/09/27 职场文书
商务专员岗位职责
2013/11/23 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库
postgresql中如何执行sql文件
2023/05/08 PostgreSQL