析构函数与php的垃圾回收机制详解


Posted in PHP onOctober 28, 2013

析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行。

GC(Garbage Collector)

在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁。

这是PHP的GC(Garbage Collector)垃圾处理机制,防止内存溢出。

当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中的所有对象同样被销毁。

__destruct() 析构函数

__destruct() 析构函数,是在垃圾对象被回收时执行。

析构函数也可以被显式调用,但不要这样去做。

析构函数是由系统自动调用的,不要在程序中调用一个对象的虚构函数。

析构函数不能带有参数。

如下面程序所示,程序结束前,所有对象被销毁。析构函数被调用了。

<? 
class Person { 
    public function __destruct(){ 
        echo '析构函数现在执行了 <br />'; 
        echo '这里一般用来设置、关闭数据库、关闭文件等收尾工作'; 
    } 
} $p = new Person(); 
for($i = 0; $i < 5; $i++){ 
    echo "$i <br />"; 
} 
?>

程序运行结果:




析构函数现在执行了 
这里一般用来设置、关闭数据库、关闭文件等收尾工作

当对象没有指向时,对象被销毁。

<? 
class Person { 
    public function __destruct(){ 
        echo '析构函数现在执行了 <br />'; 
    } 
} $p = new Person(); 
$p = null; // 析构函数在这里执行了 
$p = "abc"; // 一样的效果 
for($i = 0; $i < 5; $i++){ 
    echo "$i <br />"; 
} 
?>

程序运行结果:

析构函数现在执行了 




上面的例子第10行,我们将$p设置为空或者第11行赋予$p一个字符串,这样$p之前指向的对象就成为了垃圾对象。PHP将这个对象垃圾销毁。
php unset变量

<? class Person { 
    public function __destruct(){ 
        echo '析构函数现在执行了 <br />'; 
    } 
} 
$p = new Person(); 
$p1 = $p; 
unset($p); 
echo '现在把 $p 被销毁了,对象是否也被销毁了呢?<br />'; 
for($i = 0; $i < 5; $i++){ 
    echo "$i <br />"; 
} 
echo '现在再把 $p1 也销毁掉,即已经没有指向对象的变量了<br />'; 
unset($p1); // 现在没有指向对象的变量了,析构函数在这里执行了 
?>  
 
程序运行结果:

现在把 $p 被销毁了,对象是否也被销毁了呢?




现在再把 $p1 也销毁掉,即已经没有指向对象的变量了

析构函数现在执行了 

unset 销毁的是指向对象的变量,而不是这个对象。

PHP 相关文章推荐
加速XP搜索功能堪比vista
Mar 22 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
php实现文件编码批量转换
Mar 10 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
PHP关键特性之命名空间实例详解
May 06 PHP
PHP数据库编程之MySQL优化策略概述
Aug 16 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
Laravel框架实现定时发布任务的方法
Aug 16 PHP
PHP实现的微信公众号扫码模拟登录功能示例
May 30 PHP
php校验公钥是否可用的实例方法
Sep 17 PHP
基于PHP实现邮箱验证激活过程详解
Oct 28 PHP
web server使用php生成web页面的三种方法总结
Oct 28 #PHP
php加密解密函数authcode的用法详细解析
Oct 28 #PHP
php 模拟post_验证页面的返回状态(实例讲解)
Oct 28 #PHP
php操作mysqli(示例代码)
Oct 28 #PHP
php session_start()出错原因分析及解决方法
Oct 28 #PHP
php 强制下载文件实现代码
Oct 28 #PHP
php获取qq用户昵称和在线状态(实例分析)
Oct 27 #PHP
You might like
php 静态变量与自定义常量的使用方法
2010/01/26 PHP
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
JavaScript在form表单中使用button按钮实现submit提交方法
2017/01/23 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
Python 命令行非阻塞输入的小例子
2013/09/27 Python
Python实现二叉堆
2016/02/03 Python
python+Django+apache的配置方法详解
2016/06/01 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
Python的IDEL增加清屏功能实例
2017/06/19 Python
python与字符编码问题
2019/05/24 Python
Python 3 判断2个字典相同
2019/08/06 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
python psutil监控进程实例
2019/12/17 Python
django model通过字典更新数据实例
2020/04/01 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
党员岗位承诺口号大全
2014/03/28 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
公司门卫岗位职责范本
2014/07/08 职场文书
建筑安全责任书范本
2014/07/24 职场文书
民政局个人整改措施
2014/09/24 职场文书
公安交警个人对照检查材料思想汇报
2014/10/01 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书