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缩略图生成程式(需要GD库支持)
Mar 06 PHP
php中取得URL的根域名的代码
Mar 23 PHP
基于PHP常用函数的用法详解
May 10 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
php5.5新数组函数array_column使用
Jul 08 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
Aug 09 PHP
PHP判断是否有Get参数的方法
May 05 PHP
php中将一段数据存到一个txt文件中并显示其内容
Aug 15 PHP
Linux中为php配置伪静态
Dec 17 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
PHP判断是否是微信打开,浏览器打开的方法
Mar 14 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
May 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
德生S2000电路分析
2021/03/02 无线电
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
PHP 动态随机生成验证码类代码
2010/04/09 PHP
php笔记之:php数组相关函数的使用
2013/04/26 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
JS实现图片预加载之无序预加载功能代码
2017/05/12 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
Python break语句详解
2014/03/11 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
Python实现基于POS算法的区块链
2018/08/07 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
Django框架反向解析操作详解
2019/11/28 Python
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
台湾专柜女包:KINAZ
2019/12/26 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
公司成立感言
2014/01/11 职场文书
计算机相关专业自荐信
2014/07/02 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
经理岗位职责
2015/02/02 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript