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边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
Zend Framework页面缓存实例
Jun 25 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
CodeIgniter视图使用注意事项
Jan 20 PHP
php构造函数与析构函数
Apr 23 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
PHP编写的图片验证码类文件分享
Jun 06 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
Sep 07 PHP
php面向对象程序设计中self与static的区别分析
May 21 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 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如何计算两坐标点之间的距离
2018/12/29 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
jQuery的实现原理的模拟代码 -2 数据部分
2010/08/01 Javascript
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
使用jquery实现放大镜效果
2014/09/02 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
python回调函数的使用方法
2014/01/23 Python
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
python获取array中指定元素的示例
2019/11/26 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
python 用struct模块解决黏包问题
2020/11/07 Python
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
简述安装Slackware Linux系统的过程
2012/05/08 面试题
考试不及格的检讨书
2014/01/22 职场文书
IT工程师岗位职责
2014/07/04 职场文书
优秀党员自我评价范文
2014/09/15 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
检讨书格式
2015/01/23 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
离婚纠纷代理词
2015/05/23 职场文书