第五节 克隆 [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 spl_autoload_register实现自动加载研究
Dec 06 PHP
PHP 代码规范小结
Mar 08 PHP
PHP中的函数-- foreach()的用法详解
Jun 24 PHP
使用php验证复选框有效性的示例
Nov 13 PHP
php目录遍历函数opendir用法实例
Nov 20 PHP
Laravel 5框架学习之Eloquent 关系
Apr 09 PHP
php bootstrap实现简单登录
Mar 08 PHP
WordPress分页伪静态加html后缀
Jun 08 PHP
PHP实现对二维数组某个键排序的方法
Sep 14 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
Dec 08 PHP
PHP实现动态获取函数参数的方法示例
Apr 02 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 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
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
浅谈php自定义错误日志
2015/02/13 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
深入探密Javascript数组方法
2015/01/08 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
python使用多进程的实例详解
2018/09/19 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
python3 下载网络图片代码实例
2019/08/27 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
pytorch标签转onehot形式实例
2020/01/02 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
计算机应用专业推荐信
2013/11/13 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
2014年教务处工作总结
2014/12/03 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
北京故宫导游词
2015/01/31 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
五年级作文之想象作文
2019/10/30 职场文书
vue修饰符.capture和.self的区别
2022/04/22 Vue.js