析构函数与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 相关文章推荐
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
Mar 25 PHP
php常用字符串处理函数实例分析
Nov 22 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 PHP
php中Ctype函数用法详解
Dec 09 PHP
php中文验证码实现方法
Jun 18 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
PHP大文件切割上传功能实例分析
Jul 01 PHP
thinkPHP和onethink微信支付插件分享
Aug 11 PHP
Yii框架的布局文件实例分析
Sep 04 PHP
php实现登录页面的简单实例
Sep 29 PHP
在 Laravel 6 中缓存数据库查询结果的方法
Dec 11 PHP
php实现记事本案例
Oct 20 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
如何去掉文章里的 html 语法
2006/10/09 PHP
PHP函数utf8转gb2312编码
2006/12/21 PHP
IIS6的PHP最佳配置方法
2007/03/19 PHP
PHP 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
在PHP中操作Excel实例代码
2010/04/29 PHP
php使用异或实现的加密解密实例
2013/09/04 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
Angular JS数据的双向绑定详解及实例
2016/12/31 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
工程预算与管理应届生求职信
2013/10/06 职场文书
2013年保送生自荐信格式
2013/11/20 职场文书
银行实习生的自我评价
2013/12/09 职场文书
校园达人秀策划书
2014/01/12 职场文书
师范类求职信
2014/06/21 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
2015毕业寄语大全
2015/02/26 职场文书
企业承诺书格式范文
2015/04/28 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
导游词之太湖
2019/10/08 职场文书
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS