php5中的clone 浅拷贝 深拷贝

php5中的clone生成一个独立的对象,类似c++中的浅拷贝,

data=&$sss;
$b=clone $a;
$b->data="bbb";
$b->var="b";
var_dump($a);
var_dump($b);

结果:

object(SimpleClass)[1]
  public 'var' => string 'a' (length=1)
  public 'data' => &string 'bbb' (length=3)

object(SimpleClass)[2]
  public 'var' => string 'b' (length=1)
  public 'data' => &string 'bbb' (length=3)

解决这个问题的方法是使用php中的魔术方法__clone(),将浅拷贝转成深拷贝。

data=clone $this->data;
    }
    public function __construct(){
        $this->data=new Test;
    }
}
class Test{
    public $num=0;
}
$a=new SimpleClass;
$a->data->num="aaa";
$b=clone $a;
$b->data->num="bbb";
$b->var="b";
var_dump($a);
var_dump($b);

结果:

object(SimpleClass)[1]
  public 'var' => string 'a' (length=1)
  public 'data' => 
    object(Test)[2]
      public 'num' => string 'aaa' (length=3)

object(SimpleClass)[3]
  public 'var' => string 'b' (length=1)
  public 'data' => 
    object(Test)[4]
      public 'num' => string 'bbb' (length=3)



你可能感兴趣的:(PHP)