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();
评论