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 版本]
Mar 20 PHP
关于Intype一些小问题的解决办法
Mar 28 PHP
一个php Mysql类 可以参考学习熟悉下
Jun 21 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
关于初学PHP时的知识积累总结
Jun 07 PHP
ueditor 1.2.6 使用方法说明
Jul 24 PHP
PHP把小数转成整数3种方法
Jun 30 PHP
thinkphp的静态缓存用法分析
Nov 29 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
Jan 07 PHP
Yii2简单实现给表单添加验证码的方法
Jul 18 PHP
php执行多个存储过程的方法【基于thinkPHP】
Nov 08 PHP
Thinkphp5框架使用validate实现验证功能的方法
Aug 27 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简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
vue实现文件上传功能
2018/08/13 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
Python Matplotlib库入门指南
2015/05/18 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
用Python配平化学方程式的方法
2019/07/20 Python
python获取整个网页源码的方法
2020/08/03 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
《伯牙绝弦》教学反思
2014/03/02 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
图书借阅制度范本
2015/08/06 职场文书
php访问对象中的成员的实例方法
2021/11/17 PHP
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL