如果我通过简单地将对象分配给另一个对象而不是克隆它来复制对象会有什么不同吗?
答案 0 :(得分:3)
如果您只是简单地指定它,例如:
$obj2 = $obj;
然后你不复制对象。您将引用复制到该对象。因此,$obj2
和$obj
指向同一个对象。
示例:强>
class A {
public $foo = 'bar';
}
$obj = new A();
$obj2 = $obj;
$obj2->foo = 'foo too';
echo $obj->foo . PHP_EOL;
$obj = new A();
$obj2 = clone($obj);
$obj2->foo = 'foo too';
echo $obj->foo . PHP_EOL;
打印
foo too
bar
答案 1 :(得分:0)
除了Felix Kling的回答,使用clone还可以使用__clone()魔法。
class Obj{
public $cloned = 0;
public function __clone(){
$this->cloned++;
}
}
$obj1 = new Obj();
$obj2 = $obj1;
echo 'Times cloned: ' . $obj2->cloned; // returns 'Times cloned: 0'
var_dump($obj2 === $obj1); // true
$obj3 = clone $obj1;
echo 'Times cloned: ' . $obj3->cloned; // returns 'Times cloned: 1'
var_dump($obj3 === $obj1); // false