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 相关文章推荐
用文本作数据处理
Oct 09 PHP
一个捕获函数输出的函数
Feb 14 PHP
用PHP实现多服务器共享SESSION数据的方法
Mar 16 PHP
php下使用SMTP发邮件的代码
Jan 10 PHP
PHP 地址栏信息的获取代码
Jan 07 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
Sep 05 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
PHP实现自动识别Restful API的返回内容类型
Feb 07 PHP
PHP new static 和 new self详解
Feb 19 PHP
PHP通过get方法获得form表单数据方法总结
Sep 12 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 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实现当前页面点击下载文件的实例代码
2016/11/16 PHP
js计算精度问题小结
2013/04/22 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
js实现简单登录功能的实例代码
2013/11/09 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
python使用自定义user-agent抓取网页的方法
2015/04/15 Python
Python中的ConfigParser模块使用详解
2015/05/04 Python
Python中的字符串类型基本知识学习教程
2016/02/04 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
Python with标签使用方法解析
2020/01/17 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
Python的pygame安装教程详解
2020/02/10 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
如何进行有效的自我评价
2013/09/27 职场文书
法律专业推荐信范文
2013/11/29 职场文书
村优秀党员事迹材料
2014/01/15 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
工人先进事迹材料
2014/12/26 职场文书