PHP面向对象 —— 5 析构函数与回收机制

// =笔记部分1=

/*
疑问
1、把对象赋值为其他,比如true 会不会销毁对象?
答:可以

2、110.php中代码部分4
为什么销毁一个,空2个
最后一个会出现在hr线下面?

答:最后一个销毁,是因为php页面执行完毕了,
最后系统回收,$d此时才销毁,
因此 显示在hr线后面
*/



// =代码部分1=

class Human2 {
	
	public $name = null;
	public $gender = null;
	
    public function __construct() {
		echo '出生了<br >';
    }
	
	public function __destruct() {
		echo '再见<br >';
	}
}

$a = new Human2();
$b = new Human2();
$c = new Human2();
$d = new Human2();

unset($a);
//$b = false;
$b = true;
//改成true也可以销毁
$c = null;

echo '<hr >';



// 对象的回收机制

// =代码部分2=

class Human {
	
	public $name = null;
	public $gender = null;
	
	public function __destruct() {
		echo '再见!<br >';
	}
}

$a = new Human();
$b = $c = $d = $a;

unset($a);
echo '<hr >';

/*
那么问题来了:
1、死了几次?
2、死在hr线上,还是死在hr线下?

答:死了一次,在灰线以下。
如图11101所示,开启human房子的其中一把a钥匙没了,
还有b,c,d三把钥匙。

直到最终所有代码执行完,启动回收机制,
最终再见。
*/
这里写图片描述
这里写图片描述



// =代码部分3=

class Human {
	
	public $name = '张三';
	public $gender = null;
	
	public function __destruct() {
		echo '再见!<br >';
	}
}

$a = new Human();
$b = $c = $d = $a;


echo $a->name,'<br >'; //张三
echo $b->name,'<br >'; //张三

$b->name ='李四';
echo $a->name,'<br >'; //李四
echo $b->name,'<br >'; //李四

unset($a);
echo '<hr >';
// hr线
// 再见!



// =代码部分4=

class Human {
	
	public $name = '张三';
	public $gender = null;
	
	public function __destruct() {
		echo '再见!<br >';
	}
}


$e = $f = $g = new Human();
unset($e);
echo 'unset e<br >';

unset($f);
echo 'unset f<br >';

unset($g);
// 本行unset触发对象消亡,然后执行下一行echo g
echo 'unset g<br >';

/*
在此处,页面运行完毕,对象销毁,执行析构函数
销毁了几个对象?

答:
只有一个对象,只死1次
死在系统回收时,即页面执行完毕,因此在hr线下.
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟敛寒林o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值