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 相关文章推荐
APMServ使用说明
Oct 23 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
May 08 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
Aug 16 PHP
php设计模式之单例模式实例分析
Feb 25 PHP
php自定义错误处理用法实例
Mar 20 PHP
PHP实现的memcache环形队列类实例
Jul 28 PHP
PHP实现伪静态方法汇总
Jan 13 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
PHP实现根据数组的值进行分组的方法
Apr 20 PHP
PHP实现微信小程序人脸识别刷脸登录功能
May 24 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 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
laravel中的错误与日志用法详解
2016/07/26 PHP
浅谈PHP安全防护之Web攻击
2017/01/03 PHP
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
js获取内联样式的方法
2015/01/27 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
Vue SSR 即时编译技术的实现
2020/05/06 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
Python入门篇之列表和元组
2014/10/17 Python
Python随机生成数模块random使用实例
2015/04/13 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
python读取excel表格生成erlang数据
2017/08/26 Python
python获取多线程及子线程的返回值
2017/11/15 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
python解析xml简单示例
2019/06/21 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
keras多显卡训练方式
2020/06/10 Python
html5桌面通知(Web Notifications)实例解析
2014/07/07 HTML / CSS
.NET程序员的数据库面试题
2012/10/10 面试题
会计专业推荐信
2013/10/29 职场文书
教师业务学习制度
2014/01/25 职场文书
无私奉献演讲稿
2014/09/04 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
教师节校长致辞
2015/07/31 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
Python包argparse模块常用方法
2021/06/04 Python
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android