第五节--克隆 -- Classes and Objects in PHP5 [5]

原创 2004年06月23日 02:10:00

第五节--克隆 -- Classes and Objects in PHP5 [5]


作者:Leon Atkinson 翻译:Haohappy 来源:超越PHP
 
/*
+-------------------------------------------------------------------------------+
| = 本文为Haohappy读<<Core PHP Programming>>
| = 中Classes and Objects一章的笔记
| = 翻译为主+个人心得
| = 为避免可能发生的不必要的麻烦请勿转载,谢谢
| = 欢迎批评指正,希望和所有PHP爱好者共同进步!
+-------------------------------------------------------------------------------+
*/

第五节--克隆

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 $that->name";
$this->id = ++self::$nextSerial;
}

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

function getName() //获取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>");
?>

OCJP(1Z0-851) 模拟题分析(一)

Exam : 1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam 以下分析全都是我自己分析或者参考网上...
  • xujinsmile
  • xujinsmile
  • 2013年01月27日 19:35
  • 17367

jQuery_克隆和替换节点

•clone():克隆匹配的 DOM 元素, 返回值为克隆后的副本. 但此时复制的新节点不具有任何行为. •clone(true):复制元素的同时也复制元素中的的事件 •replac...
  • fanpengfei0
  • fanpengfei0
  • 2017年01月09日 01:43
  • 1416

为什么 Instantiate 克隆出来的GameObject的Scale 在 SetParent 总是放大 64倍?

经常会犯一个错误: GameObject childNodeClone = Instantiate(childNode) as GameObject; childNodeClone.transfor...
  • cp790621656
  • cp790621656
  • 2016年02月27日 13:25
  • 3677

Install Nginx with PHP5 and MySQL (LEMP) in Ubuntu 13.10 Server

This tutorial shows you how to install LEMP stack in Ubuntu 13.10. LEMP stands for Linux, Nginx (pr...
  • PekingStreet
  • PekingStreet
  • 2015年03月31日 17:28
  • 292

php_lang_ref:classes and objects >> object interface

  • alexander_phper
  • alexander_phper
  • 2016年07月21日 11:37
  • 149

php_lang_ref:classes and objects>>class abstraction

  • alexander_phper
  • alexander_phper
  • 2016年07月21日 08:37
  • 137

Beginning PHP5, Apache, And MySQL Web Development

  • 2009年08月14日 13:12
  • 13.7MB
  • 下载

PHP5.and.MySQL.Bible.eBook

  • 2007年09月16日 09:21
  • 5.51MB
  • 下载

Agile Web Application Development with Yii 1.1 and PHP5

  • 2011年07月05日 12:41
  • 4.97MB
  • 下载

Programmmieren lernen in PHP5

  • 2007年07月30日 02:20
  • 5.63MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第五节--克隆 -- Classes and Objects in PHP5 [5]
举报原因:
原因补充:

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