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

2020-10-28 15:10:35 浏览数 (2)

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

代码语言:javascript复制
<?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()”方法可以没有参数,它自动包含 t h i s 和 this和 this和that两个指针, t h i s 指 向 复 本 ( 复 制 后 的 对 象 ) , 而 this指向复本(复制后的对象),而 this指向复本(复制后的对象),而that指向原本(原来的对象);

第一种:复制的对象

代码语言:javascript复制
<?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已经被废除了,为什么,因为使用它报错!!!

0 人点赞