php中的clone()方法

php5中默认通过引用传递对象,假设$obj1和$obj2是两个对象,使用$obj2=$obj1这样的方法复制出来的对象是相关联的,如果在程序中需要复制出一个值和原来相同的对象又不希望复制出来的对象与源对象相关联,那么就需要使用clone关键字,类似于$obj2=clone $obj1; 如果还希望在复制的同时,目标对象的某些属性与源对象的不同,可以在类里面定义一个__clone()方法,在这个方法中完成为目标对象的属性赋新值。


<?php
class doclone{
    private $id,$name,$address;
    public function __construct($id=0,$name='',$address=''){
        $this->name=$name;
        $this->id=$id;
        $this->address=$address;
}
    public function get_id(){
        return $this->id;
}
    public function get_name(){
        return $this->name;
}
    public function get_address(){
        return $this->address;
}
    public function __clone(){
        $this->id=$this->id+1;
        $this->name='Kong';
        $this->address='USA';
}
}
 
$A = new doclone(10,'A','UK');
echo '克隆之前的对象:';
echo 'id='.$A->get_id();
echo 'name='.$A->get_name();
echo 'address='.$A->get_address();
echo "\n";
 
 
$B = clone $A;
echo '克隆过后的对象:';
echo 'id='.$A->get_id();
echo 'name='.$A->get_name();
echo 'address='.$A->get_address();
echo "\n";
 
echo '克隆过后的对象属性:';
echo 'id='.$B->get_id();
echo 'name='.$B->get_name();
echo 'address='.$B->get_address();


鼎云博客

从执行结果可以看出,使用了clone之后,复制出的对象属性在__clone方法中重新设置,并且源对象A和目标对象B不再有任何关联。

鼎云博客
  • 最新评论
  • 总共0条评论