有一点要注意是对象的浅复制和深复制的区别。
interface Prototype{ public function cloneMe(); } class Object1 implements Prototype{ private $obj; private $num=1; public function cloneMe(){ return clone $this; } /** *__clone方法是在对象被成功复制后调用的,并且调用的是新对象的clone方法,而不是原对象。 */ public function __clone(){ $this->obj && ($this->obj = clone $this->obj); //实现深度复制。 } public function setNumber($num){ $this->num = $num; } public function setObj($obj){ $this->obj = $obj; } public function show(){ echo 'This is Object'.$this->num.'<br>'; } } $object1 = new Object1(); $copyObject1 = $object1->cloneMe(); $copyObject1->setNumber(2); $object1->show(); $copyObject1->show();