// =笔记部分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线下.
*/