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 相关文章推荐
第四节--构造函数和析构函数
Nov 16 PHP
php 表单验证实现代码
Mar 10 PHP
PHP 模拟登陆MSN并获得用户信息
May 16 PHP
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
php支付宝手机网页支付类实例
Mar 04 PHP
windows平台中配置nginx+php环境
Dec 06 PHP
Symfony2实现在doctrine中内置数据的方法
Feb 05 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
Oct 09 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 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
开源SNS系统-ThinkSNS
2008/05/18 PHP
php 取得瑞年与平年的天数的代码
2009/08/10 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
php中hashtable实现示例分享
2014/02/13 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
php数据访问之增删改查操作
2016/05/09 PHP
php简单统计中文个数的方法
2016/09/30 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
2018/08/13 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
Python中的高级函数map/reduce使用实例
2015/04/13 Python
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
优秀老员工获奖感言
2014/02/15 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
高质量“欢迎词”
2019/04/03 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js
MySQL创建定时任务
2022/01/22 MySQL
Python读写yaml文件
2022/03/20 Python