php中用unset销毁变量并释放内存


Posted in PHP onMay 10, 2020

PHP的unset()函数用来清除、销毁变量,不用的变量,我们可以用unset()将它销毁。但是某些时候,用unset()却无法达到销毁变量占用的内存!

我们先看一个例子:

<?php
$s = str_repeat('1',255);  //产生由255个1组成的字符串
$m = memory_get_usage();  //获取当前占用内存
unset($s);
$mm = memory_get_usage();  //unset()后再查看当前占用内存
echo $m-$mm;
?>

最后输出unset()之前占用内存减去unset()之后占用内存,如果是正数,那么说明unset($s)已经将$s从内存中销毁(或者 说,unset()之后内存占用减少了),可是我在PHP5和windows平台下,得到的结果是:-48。

这是否可以说明,unset($s)并没有起 到销毁变量$s所占用内存的作用呢?我们再作下面的例子:

<?php
$s = str_repeat('1',256);  //产生由256个1组成的字符串
$m = memory_get_usage();  //获取当前占用内存
unset($s);
$mm = memory_get_usage();  //unset()后再查看当前占用内存
echo $m-$mm;
?>

这个例子,和上面的例子几乎相同,唯一的不同是,$s由256个1组成,即比第一个例子多了一个1,得到结果是:224。这是否可以说明,unset($s)已经将$s所占用的内存销毁了?

通过上面两个例子,我们可以得出以下结论:

结论一、unset()函数只能在变量值占用内存空间超过256字节时才会释放内存空间。

那么是不是只要变量值超过256,使用unset就可以释放内存空间呢?我们再通过一个例子来测试一下:

<?php
$s = str_repeat('1',256);    //这和第二个例子完全相同
$p = &$s;
$m = memory_get_usage();
unset($s);           //销毁$s
$mm = memory_get_usage();
echo $p . '<br />';
echo $m-$mm;
?>

刷新页面,我们看到第一行有256个1,第二行是-48,按理说我们已经销毁了$s,而$p只是引用$s的变量,应该是没有内容了,另外,unset($s)后内存占用却比unset()前增加了!现在我们再做以下的例子:

<?php
$s = str_repeat('1', 256);   //这和第二个例子完全相同
$p = &$s;
$m = memory_get_usage();
$s = null;           //设置$s为null
$mm = memory_get_usage();
echo $p . '<br />';
echo $m-$mm;
?>

现在刷新页面,我们看到,输出$p已经是没有内容了,unset()前后内存占用量之差是224,即已经清除了变量占用的内存。本例中的$s=null也可以换成unset(),如下:

<?php
$s = str_repeat('1', 256);   //这和第二个例子完全相同
$p = &$s;
$m = memory_get_usage();
unset($s);           //销毁$s
unset($p);
$mm = memory_get_usage();
echo $p . '<br />';
echo $m-$mm;
?>

我们将$s和$p都使用unset()销毁,这时再看内存占用量之差也是224,说明这样也可以释放内存。那么,我们可以得到另外一条结论:

结论二、只有当指向该变量的所有变量(如引用变量)都被销毁后,才会释放内存。

相信经过本文的例子后,大家应该对unset()有所了解了,最起码,本人用unset()也是为了在变量不起作用时,释放内存。

内容补充

php使用unset()删除数组中某个单元

unset既可以删除变量,也可以删除数组中某个单元。但要注意的是,数组不会重建索引。

实例如下:

<?php
$arr = array("朝阳区","海淀区","西城区","东城区","丰台区");
unset($arr[3]);
echo "<pre>";
print_r($arr);
?>

输出结果如下:

Array
(
 [0] => 朝阳区
 [1] => 海淀区
 [2] => 西城区
 [4] => 丰台区
)

到此这篇关于php中用unset销毁变量并释放内存的文章就介绍到这了,更多相关php如何用unset销毁变量并释放内存内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
一个php作的文本留言本的例子(二)
Oct 09 PHP
让你的PHP同时支持GIF、png、JPEG
Oct 09 PHP
谈谈新手如何学习PHP
Dec 14 PHP
php初学者写及时补给skype用户充话费的小程序
Nov 02 PHP
php输出xml格式字符串(用的这个)
Jul 12 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
smarty高级特性之过滤器的使用方法
Dec 25 PHP
php遍历解析xml字符串的方法
May 05 PHP
php从身份证获取性别和出生年月
Feb 09 PHP
php实现表单提交上传文件功能
May 28 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
Aug 03 PHP
PHP 对接美团大众点评团购券(门票)的开发步骤
Apr 03 PHP
php屏蔽错误及提示的方法
May 10 #PHP
php判断数组是否为空的实例方法
May 10 #PHP
通过PHP实现获取访问用户IP
May 09 #PHP
如何通过PHP实现Des加密算法代码实例
May 09 #PHP
php变量与字符串的增删改查操作示例
May 07 #PHP
PHP数组与字符串互相转换实例
May 05 #PHP
禁止直接访问php文件代码分享
May 05 #PHP
You might like
php自定义函数之递归删除文件及目录
2010/08/08 PHP
php强制下载类型的实现代码
2011/04/21 PHP
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
学习PHP的数组总结【经验】
2016/05/05 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
Javascript中arguments对象详解
2014/10/22 Javascript
Javascript中Array.prototype.map()详解
2014/10/22 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
JavaScript如何操作css
2020/10/24 Javascript
python实现class对象转换成json/字典的方法
2016/03/11 Python
Python中字符串的格式化方法小结
2016/05/03 Python
Python使用pymysql小技巧
2017/06/04 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
澳大利亚音乐商店:Bava’s Music City
2019/05/05 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
质检员工作总结2015
2015/04/25 职场文书
2016党员入党决心书
2015/09/22 职场文书
python 判断文件或文件夹是否存在
2022/03/18 Python