php面向对象第九篇 对象克隆clone,记住哈,$that已经被废除了,使用会错的啊啊!!!

对象克隆的核心:是克隆出的是一个同一个类下的对象,并且两个对象之间互不干扰。
互不干扰的意思是;两个对象并不是指向同一个内存地址的哈。
克隆:的意思是new一个出来把,前提条件必须是同一个类下的哈
代码演示把:

<?php
class fu
{
	function eat()
	{
		echo "爸爸在吃饭";
	}
}
class zi extends fu
{
	var $name='cyg';
	
}
$zi1=new zi();
echo "zi1".$zi1->name;
echo "<br />";
$zi2=clone $zi1;//对象克隆,clone代表开辟一段新的内存地址,$zi1代表是同一个类的实例的哈.给$zi2
echo "zi2".$zi2->name;
echo "<br />";
$zi2->name='lw';
echo "zi1".$zi1->name;
echo "<br />";
echo "zi2".$zi2->name;
?>

记住,互不干扰!!!
不然直接写$zi2=$zi1;会干扰的哈

__clone方法:
是在对象克隆时自动调用的方法,用“__clone()”方法将建立一个与原对象拥有相同属性和方法的对象,如果想在克隆后改变原对象的内容,需要在__clone()中重写原本的属性和方法,“__clone()”方法可以没有参数,它自动包含thisthis和that两个指针,thisthis指向复本(复制后的对象),而that指向原本(原来的对象);

第一种:复制的对象

<?php
class fu
{
	function eat()
	{
		echo "爸爸在吃饭";
	}
}
class zi extends fu
{
	var $name='cyg';
	function __clone()
	{
		$this->name='fffffff';
	}
}
$zi1=new zi();
echo "zi1".$zi1->name;
echo "<br />";
$zi2=clone $zi1;//对象克隆,clone代表开辟一段新的内存地址,$zi1代表是同一个类的实例的哈.给$zi2
echo "zi2".$zi2->name;
echo "<br />";
$zi2->name='lw';
echo "zi1".$zi1->name;
echo "<br />";
echo "zi2".$zi2->name;
?>

第二种:原来的对象
做不了,$that已经被废除了,为什么,因为使用它报错!!!

©️2020 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值