第五节–克隆

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”State of Qatar; $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”); ?

/*
+——————————————————————————-+
| = 本文为Haohappy读<> 
| = 中Classes and Objects一章的笔记 
| = 翻译为主+个人心得 
| = 为防止恐怕产生的没有必要的麻烦请勿转发,谢谢 
| = 接待商酌指正,希望和具有PHP爱好者协作升高! 
| = PHP5研商中央: 
+——————————————————————————-+
*/

第五节–克隆

PHP5中的对象模型通过援用来调用对象, 但不时你也许想构造建设二个对象的别本,并希望原来的目的的转移不影响到别本 . 为了那样的指标,PHP定义了多个极其的方法,称为__clone. 像__construct和__destruct相符,前面有多少个下划线.

默认地,用__clone方法将创制多少个与原对象具有同等属性和形式的对象. 要是您想在仿制时更动暗中认可的内容,你要在__clone中覆写(属性或形式State of Qatar.

克隆的法门能够未有参数,但它同有时常间饱含this和that指针(that指向被复制的对象卡塔尔. 假诺你筛选克隆自身,你要小心复制任何你要你的靶子满含的新闻,从that到this. 如若你用__clone来复制. 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() . “
“);  

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

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图