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不再有任何关联。
无论从事什么行业,只要做好两件事就够了,一个是你的专业、一个是你的人品,专业决定了你的存在,人品决定了你的人脉,剩下的就是坚持,用善良專業和真诚赢取更多的信任。