对象克隆的核心:是克隆出的是一个同一个类下的对象,并且两个对象之间互不干扰。 互不干扰的意思是;两个对象并不是指向同一个内存地址的哈。 克隆:的意思是new一个出来把,前提条件必须是同一个类下的哈 代码演示把:
function eat() { echo "爸爸在吃饭"; } } class zi extends fu { var $name='cyg'; } $zi1=new zi(); echo "zi1".$zi1->name; echo " "; $zi2=clone $zi1;//对象克隆,clone代表开辟一段新的内存地址,$zi1代表是同一个类的实例的哈.给$zi2 echo "zi2".$zi2->name; echo " "; $zi2->name='lw'; echo "zi1".$zi1->name; echo " "; echo "zi2".$zi2->name; ?>
记住,互不干扰!!! 不然直接写$zi2=$zi1;会干扰的哈
__clone方法: 是在对象克隆时自动调用的方法,用“__clone()”方法将建立一个与原对象拥有相同属性和方法的对象,如果想在克隆后改变原对象的内容,需要在__clone()中重写原本的属性和方法,“__clone()”方法可以没有参数,它自动包含 t h i s 和 this和 this和that两个指针, t h i s 指 向 复 本 ( 复 制 后 的 对 象 ) , 而 this指向复本(复制后的对象),而 this指向复本(复制后的对象),而that指向原本(原来的对象);
第一种:复制的对象
function eat() { echo "爸爸在吃饭"; } } class zi extends fu { var $name='cyg'; function __clone() { $this->name='fffffff'; } } $zi1=new zi(); echo "zi1".$zi1->name; echo " "; $zi2=clone $zi1;//对象克隆,clone代表开辟一段新的内存地址,$zi1代表是同一个类的实例的哈.给$zi2 echo "zi2".$zi2->name; echo " "; $zi2->name='lw'; echo "zi1".$zi1->name; echo " "; echo "zi2".$zi2->name; ?>
第二种:原来的对象 做不了,$that已经被废除了,为什么,因为使用它报错!!!