第五节 克隆 [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+mysql来做一个功能强大的在线计算器
Oct 12 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
Oct 03 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
Jun 24 PHP
php通过ajax实现双击table修改内容
Apr 28 PHP
浅谈Eclipse PDT调试PHP程序
Jun 09 PHP
php实现最简单的MVC框架实例教程
Sep 08 PHP
php实现留言板功能
Mar 05 PHP
PHP中error_reporting函数用法详细介绍
Jun 11 PHP
php设计模式之装饰模式应用案例详解
Jun 17 PHP
apache集成php7.3.5的详细步骤
Jun 20 PHP
PHP学习记录之常用的魔术常量详解
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
中篇:安装及配置PHP
2006/12/13 PHP
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
js防止页面被iframe调用的方法
2014/10/30 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
VUEX 数据持久化,刷新后重新获取的例子
2019/11/12 Javascript
Python基础语法(Python基础知识点)
2016/02/28 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
Python命令行click参数用法解析
2019/12/19 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
Python爬虫入门教程02之笔趣阁小说爬取
2021/01/24 Python
python实现简单文件读写函数
2021/02/25 Python
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
公司管理建议书范文
2014/03/12 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
常务副总经理任命书
2014/06/05 职场文书
教师理论学习心得体会
2016/01/21 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
Python编程编写完善的命令行工具
2021/09/15 Python
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python