第五节 克隆 [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 相关文章推荐
PHP5/ZendEngine2的改进
Oct 09 PHP
数据库相关问题
Oct 09 PHP
网站加速 PHP 缓冲的免费实现方法
Oct 09 PHP
消息持续发送的完整例子
Oct 09 PHP
dedecms采集中可以过滤多行代码的正则表达式
Mar 17 PHP
PHP对象Object的概念 介绍
Jun 14 PHP
SSO单点登录的PHP实现方法(Laravel框架)
Mar 23 PHP
Yii2.0表关联查询实例分析
Jul 18 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
Jul 20 PHP
Yii2框架实现注册和登录教程
Sep 30 PHP
Discuz论坛密码与密保加密规则
Dec 19 PHP
PHP-X系列教程之内置函数的使用示例
Oct 16 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
PHP4实际应用经验篇(8)
2006/10/09 PHP
PHP文件下载类
2006/12/06 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
Vue的data、computed、watch源码浅谈
2020/04/04 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
python 判断自定义对象类型
2009/03/21 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
2017/12/09 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
什么是python的自省
2020/06/21 Python
比利时家具购买网站:Home24
2019/01/03 全球购物
护理自荐信范文
2013/10/05 职场文书
动物科学专业毕业生的自我评价
2013/11/29 职场文书
家长会欢迎标语
2014/06/24 职场文书
学校安全生产月活动总结
2014/07/05 职场文书
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android
浅谈JavaScript作用域
2021/12/06 Javascript
Java 写一个简单的图书管理系统
2022/04/26 Java/Android