PHP5的对象模型[5]--对象复制

原创 2004年08月08日 00:02:00
第五节--克隆

PHP5中的对象模型通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本 . 为了这样的目的,PHP定义了一个特殊的方法,称为__clone. 像__construct和__destruct一样,前面有两个下划线.

默认地,用__clone方法将建立一个与原对象拥有相同属性和方法的对象. 如果你想在克隆时改变默认的内容,你要在__clone中覆写(属性或方法).

克隆的方法可以没有参数,但它同时包含this和that指针(that指向被复制的对象). 如果你选择克隆自己,你要小心复制任何你要你的对象包含的信息,从that到this. 如果你用__clone来复制. PHP不会执行任何隐性的复制,

下面显示了一个用系列序数来自动化对象的例子:

<?php
class ObjectTracker //对象跟踪器
{
private static $nextSerial = 0;
private $id;
private $name;

function __construct($name) //构造函数
{
$this->name = $name;
$this->id = ++self::$nextSerial;
}

function __clone() //克隆
{
$this->name = "Clone of $this->name";
$this->id = ++self::$nextSerial;
}

function getId() //获取id属性的值
{
return($this->id);
}

function getName() //获取name属性的值
{
return($this->name);
}
}

$ot = new ObjectTracker("Zeev's Object");
$ot2 = clone$ot;

//输出: 1 Zeev's Object
print($ot->getId() . " " . $ot->getName() . "
");

//输出: 2 Clone of Zeev's Object
print($ot2->getId() . " " . $ot2->getName() . "
");
?>

版权声明:本文为博主原创文章,未经博主允许不得转载。

php对象的拷贝原理(附图解)

php对象的拷贝有三种常用的方式:   先定义一个Dog类。              class Dog{ public $name; ...
  • xyz_dream
  • xyz_dream
  • 2017年03月21日 13:10
  • 376

ADO.NET中5大对象简介

ADO.NET
  • haiyan_cf
  • haiyan_cf
  • 2014年05月28日 17:20
  • 3707

Java学习笔记----你可能不知道那些知识,对象复制与引用

1.private ,protected,static不能用来修饰interface。 2.java在处理基本数据类型(例如int ,char,double)时,都是采用按值传递的方式执行,除此之外的...
  • wenwen091100304
  • wenwen091100304
  • 2015年06月28日 21:56
  • 1780

C#类型基础----对象复制

C#类型基础----对象复制   前言 有的时候,创建一个对象可能会非常耗时,比如对象需要从远程数据库中获取数据来填充,又或者创建对象需要读取磁盘文件.此时,如果已经有了一个对象,再创建新...
  • shanyongxu
  • shanyongxu
  • 2016年01月03日 19:17
  • 1550

js中对象的拷贝(复制)

一场景 二浅拷贝 三深拷贝 一、场景除了基本类型跟null,对象之间的赋值,只是将地址指向同一个,而不是真正意义上的拷贝将一个对象赋值给另外一个对象。var a = [1,2,3]; var b = ...
  • hp5321
  • hp5321
  • 2016年12月21日 16:04
  • 2144

JAVA 对象深度复制实现

JAVA 有两种深度复制实现方式, package JAVAImprove; import java.io.ByteArrayInputStream; import java.io.ByteArra...
  • dajijidanaizi
  • dajijidanaizi
  • 2016年05月31日 11:01
  • 820

Java如何复制对象

假如说你想复制一个简单变量。很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,b...
  • czjuttsw
  • czjuttsw
  • 2013年01月10日 21:29
  • 41060

JAvaScript和DOM(文档对象模型)和BOM(浏览器对象模型)

DOM是针对XML但经过扩展用于HTML的应用程序编程接口DOM把整个页面映射成一个多层节点结构,HTML页面中的每一个组成部分都是某种类型的节点,这些节点也包含这不同类型的数据...
  • wang2963973852
  • wang2963973852
  • 2016年10月27日 13:58
  • 1320

Java对象的深复制和浅复制

原文链接我们在编码过程经常会碰到将一个对象传递给另一个对象,java中对于基本型变量采用的是值传递,而对于对象比如bean传递时采用的引用传递也就是地址传递,而很多时候对于对象传递我们也希望能够象值传...
  • pony_maggie
  • pony_maggie
  • 2016年08月02日 09:57
  • 4391

java使用第三方工具BeanUtils实现对象的复制

1.为什么要使用BeanUtils组件? 由于我们经常操作javabean,很频繁的get和set来实现属性的复制,apache提供了这个BeanUtils来实现直接对象的拷贝。 2.BeanUtil...
  • ya_1249463314
  • ya_1249463314
  • 2016年10月17日 23:53
  • 6343
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP5的对象模型[5]--对象复制
举报原因:
原因补充:

(最多只允许输入30个字)