深入理解面向对象析构函数回收机制
来源:互联网 发布:mysql.sock 编辑:程序博客网 时间:2024/05/15 02:30
深入理解面向对象析构函数回收机制
一、Demo1
以下代码在执行时候,会执行几次析构函数?
class People
{
public function __destruct()
{
echo "死掉了";
}
}
$a = new People(); // 注意下 这个$a 并不是一个对象 而是一个变量指向了对象
$b = new People();
$c = new People();
$d = new People();
答案:四次!
解释:php是一门脚本语言,在这个脚本执行完毕后,会自动销毁这个对象,也就是会销毁四次这个对象。
二、Demo2
请问执行几次销毁?并且是在水平线下还是在水平线上?
class People
{
public function __destruct()
{
echo "结束了~~";
}
}
$d = $c= $b= $a = new People();
unset($a);
echo "<hr>";
// 一个对象如果有其他变量指向它 unset一个并不能在内存中销毁
答:执行一次销毁 并且在水平线下;
解释: $d = $c= $b= $a = new People();这个其实相当于一个房间有四把钥匙,又因为对象是引用传参,所以你把$a 给删除了 或者这样说 你把a钥匙扔掉了,房间并不会摧毁。当程序执行完毕后,才会销毁。所以是在水平线下。
三、Demo3
输出几次 “结束了”?并且是在哪里输出的?
class People
{
public function __destruct()
{
echo "结束了";
}
}
$a = new People();
unset($a);
echo "<hr>";
答:输出一次 “结束了”,并且是在水平线上
解释:对象销毁了 所以直接执行析构函数了
四、Demo4
执行几次结束了 并且是在水平线上 还是水平线下
class People
{
public function __destruct()
{
echo "结束了~~";
}
}
$d = $c= $b= $a = new People();
unset($a);
unset($b);
unset($c);
unset($d);
echo "<hr>";
答:执行了一次结束了 并且是在水平线上
解释:第一次第二次第三次unset 不会出现 ,当第四次unset时候会先触发析构函数,然后在输出hr水平线。
$this 指向调用方法 $a->say(); 那么 $this 就是$a
阅读全文
1 0
- 深入理解面向对象析构函数回收机制
- 深入理解C++面向对象机制(三)构造与析构
- 深入理解Java回收机制
- 深入理解java回收机制
- 深入理解java回收机制
- 深入理解C++面向对象机制(零)单继承
- 深入理解C++面向对象机制(一)多继承
- 深入理解C++面向对象机制(二)虚继承
- 深入理解.NET内存回收机制
- 深入理解.NET内存回收机制
- 深入理解.NET内存回收机制
- 深入理解.NET内存回收机制
- 深入理解.NET内存回收机制
- 深入理解.NET内存回收机制
- 深入理解.NET内存回收机制
- 深入理解Java的垃圾回收机制
- 深入理解.NET内存回收机制
- 深入理解.NET内存回收机制
- Java中的Enum的简单使用
- 剑指offer——二叉树中和为某一值的路径
- 不敢死队问题
- Java8 对Map的转换封装
- java dbutil 1.1.1 版本更新
- 深入理解面向对象析构函数回收机制
- SpringMVC确定目标方法POJO类型入参的过程
- 交互设计不只是解决问题
- 解决和说明> eth.getCompilers() Error: The method eth_getCompilers does not exist/is not available
- Linux服务器启动tomcat很慢解决方法
- 服务器架设
- 字符串调用split以点逗"."符号作为拆分符时返回的是空数组
- 从“适合”出发选择服务器空间!
- BlockingQueue案例