php克隆

对象克隆
在php中使用"clone"关键字来克隆对象。
<?php

class Person {
public $name;
function __construct($name="" ) {
$this->name =$name;
}

function say()  {   
echo "我叫:". $this->name ."<br>" ;
}
}
 $Person=new Person( "张三");
 $Person1=clone $Person; //使用clone关键字克隆(复制)对象,创建一个对象的副本
// $Person1=$Person   //这不是复制对象,而是为对象多复制出一个访问该对象的引用
$Person->say();                   
$Person1->say();                   
?>
上面程序运行结果为:
我叫:张三
我叫:张三
克隆的副本和原本拥有相同的类和属性
if($Person == $Person1){
 echo "Person和Person1具有相同的类和属性" ;
}else{
return false;
}

程序输出:Person和Person1具有相同的类和属性
克隆的副本和原本存储在不相同的位置
if ($Person === $Person1)
 echo "Person和Person1具有相同的类和属性且存储在相同的位置" ;
} else{
return false ;
}
程序结果为false。
克隆的副本和原本独立而互不干扰
我们来改变一下原本的属性值,看一下有什么影响
$Person=new Person( "张三");
$Person1=clone $Person;                
$Person1-> name='李四' ;
$Person->say();                   
$Person1->say();
程序运行结果为:
我叫:张三
我叫:李四
由此可知,克隆出来的副本和原本两个对象完全独立而互不干扰。
__clone()方法
如果需要为克隆后的副本对象克隆时重新为成员属性赋值,可以在类中声明一个魔术方法"__clone"
<?php
    class Person {
         public $name;
          function __construct($name="" ) {
              $this->name =$name;
          }
          function __clone(){//在对象克隆时自动调用,用来为新对象重新赋值
             $this->name ='李四' ;
        }
         function say()  {   
               echo "我叫:". $this->name ."<br>" ;
          }
     }
    $Person=new Person( "张三");
    $Person1=clone $Person;               
     $Person->say();                  
     $Person1->say();                  

?>

程序运行结果为:
我叫:张三
我叫:李四

 

 

你可能感兴趣的:(php克隆)