CLONE和复制对象有什么区别?

时间:2010-12-27 10:13:18

标签: php oop

如果我通过简单地将对象分配给另一个对象而不是克隆它来复制对象会有什么不同吗?

2 个答案:

答案 0 :(得分:3)

如果您只是简单地指定它,例如:

$obj2 = $obj;

然后你不复制对象。您将引用复制到该对象。因此,$obj2$obj指向同一个对象。

另见Objects and references

示例:

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

DEMO

答案 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