PHP中语言中有些函数对于在字面上并不是很好理解,需要在实际编码中总结经 验,来掌握这些知识。今天说的是PHP unset全局变量在使用中遇到的一些问题。

PHP中有个释放变量的语句叫做 unset(从PHP4开始unset已经不再是一个函数了,而是一个语句), 前几天用unset的时候出了点问题,于是把unset问题总结如下。如果您仔细阅读过PHP的手册,那么就没必要再看这篇文章了,这篇文章是写给看手册 不用心的同学的。

首先要强调的一点是PHP unset全局变量在PHP中已经不再是一个函数了,既然不是函数,那么就没有了返回值,所以用的时候不能够用unset的返回值来做判断。
其 次,在函数中,PHP unset全局变量只能销毁局部变量,并不能销毁全局变量,来看下手册的一个例子
1. < ?PHP
2. function destroy_foo() {
3. global $foo;
4. unset($foo);
5. }
6. $foo = ‘bar’;
7. destroy_foo();
8. echo $foo;
9. ?>
返回的结果为
bar
为什么会这样呢?原因就是PHP unset全局变量在函数中只能销毁局部变量。如果在程序中需要用到销毁 全局变量的应该如 何做呢?也很简单,用$GLOBALS数组来实现。看下面的 例子:
1. < ?PHP
2. function foo() {
3. unset($GLOBALS['bar']);
4. }
5. $bar = “something”;
6. foo();
7. var_dump($bar);
8. ?>
PHP unset()函数被我们用来销毁变量,但是往往在实际操作时不能使内存中的数据进行释放。我们在文章中讲为大家具体讲解有关问题的解决办法。
我 们在学习PHP语言的时候,通常都会各个函数的用法比较模糊,很那去一一的掌握。但是我们又必须要掌握这些函数。下面我们就为大家详细介绍有关PHP unset()函数的相关使用方法。
PHP unset()函数是用来销毁变量的,但很多时候,这个函数只把变量给销毁了,内存中存放的该变量的值仍然没有销毁,也就是没能达到我们想要的释放内存的 效果。这里我建议大家用 $变量=null 的方法来释放其内存。原因看了下面的就知道了。
以下是关于PHP unset()函数的几点要点:
1. 该函数只有在变量值所占空间超过256字节长的时候才会释放内存
2. 只有当指向该值的所有变量(比如有引用变量指向该值)都被销毁后,地址才会被释放(也要执行1的判断)

下面给出例子代码论 证:

1. < ?php
2. $test=str_repeat(“1″,256); //重复一个字符串,返回值为重复后组成的字符串
3. $s = memory_get_usage();
4. //该函数用来查看当前所用内存
5. unset($test);
6. $e = memory_get_usage();
7. echo ‘ 释放内存: ‘.($s-$e);
8. //输出为272,但如果上面test变量改为$test=str_repeat(“1″,255),输出则为0 ,变量值不足256不会释放内存的
9. ?>
1. < ?php
2. $test = str_repeat(“1″,256);
3. $p = &$test;
4. unset($test);
5. echo $p;
6. //输出为256个1。如果上面改为unset($p),更不行了,echo $test 直接显示为256个1
7. ?>
也就是说内存中赋给$a的值仍然存在。可见unset()并没达到释放内存的效果。
但如 果在上述代码中加入$test=null,或者再加一个unset($p),就能达到释放内存效果了,PHP unset()函数测试代码如下:
变量赋值为null方法:
1. < ?php
2. $test = str_repeat(“1″,256);
3. $p = &$test;
4. $s = memory_get_usage();
5. $test = null;
6. unset($test); //试一下将该句与$test=null 调换先后顺序,则结果将不相同
7. $e = memory_get_usage();
8. echo ‘ 释放内存: ‘.($s-$e);
9. //输出为272
10. var_dump($p); //输出为NULL
11. ?>
将指向该地址中值的变量全部销毁的方法:
1. < ?php
2. $test = str_repeat(“1″,256);
3. $p = &$test;
4. $s = memory_get_usage();
5. //注意,以下2个unset()顺序对调没有关系,不影响结果
6. unset($p);
7. unset($test);
8. $e = memory_get_usage();
9. echo ‘ 释放内存: ‘.($s-$e);
10. ?>
PHP unset()函数试用如上所示需要注意。

转载于:https://blog.51cto.com/flandycheng/444811

PHP中的unset的使用问题相关推荐

  1. php的foreach循环执行过程分析以及循环中执行unset()的一些问题

    文章目录 一.前言 二.foreach的执行过程 1.关于版本不同的foreach变化 2.关于引用计数 3.探寻foreach的运行过程 三.foreach中执行unset()的问题 1.当我们是为 ...

  2. CMake中set/unset的使用

    CMake中的set命令用于将普通.缓存或环境变量(normal, cache, or environment variable)设置为给定值,其格式如下:指定<value>...占位符( ...

  3. PHP如何让内存不释放,PHP中使用unset销毁变量并内存释放问题

    代码如下: for ( $i = 1; $i < 100; $i++ ) { $str = str_repeat('01234567', $i); $a = memory_get_usage() ...

  4. php填补空缺变量,在PHP中可以使用unset()函数删除数组中的某个元素,数组将自动填补空缺索引。( )...

    [单选题]实用新型专利权和外观设计专利权的期限为( ),自申请日起计算. [判断题]切削中,对切削力影响较小的是前角和主偏角. [多选题]作为马克思主义产生阶级基础的19世纪三大工人起义是 [单选题] ...

  5. PHP--isset()和unset()函数的用法

    isset (PHP 3, PHP 4, PHP 5 ) isset -- 检测变量是否设置 描述 bool isset ( mixed var [, mixed var [, ...]]) 如果 v ...

  6. 如何检查Bash中是否设置了变量?

    我如何知道是否在Bash中设置了变量? 例如,如何检查用户是否将第一个参数赋予函数? function a {# if $1 is set ? } #1楼 检查是否设置了变量 var="&q ...

  7. php如何通过变量销毁unset的过程讲解

    2019独角兽企业重金招聘Python工程师标准>>> php如何通过变量销毁unset的过程讲解 unset -- 释放给定的变量 描述 void unset ( mixed va ...

  8. PHP is_null,empty以及isset,unset的区别

    1.empty 判斷一個變量是否為"空". null.false.00.0.'0′.』.為以上值的變量在檢測時都將返回true. 2.isset 判斷一個變量是否已經設置. 0.0 ...

  9. repo命令添加bin_Linux shell中getopts命令学习--实现一个添加yum源的脚本

    这是本人第一次写博客,之前从一些开源技术网站上看到不少大牛和前辈们的文章,从中学习受益.本着开源界的奉献和学习精神,觉得有必要将自己的学习成果拿出来与大家一起交流分享,既当作是一种自我学习的总结也可能 ...

  10. java unset_PHP--isset()和unset()函数的用法-Java架构师必看

    isset(PHP3,PHP4,PHP5)isset--检测变量是否设置描述boolPHP isset (PHP 3, PHP 4, PHP 5 ) isset -- 检测变量是否设置 描述 bool ...

最新文章

  1. 16 导出pcb各网络的布线长度_设计PCB流程
  2. java中静态是什么,java中静态和非静态有什么区别
  3. puppet-dashboard 安装(草稿)
  4. mysql时间复杂度o的n次方_MySQL性能测试调优
  5. 一文整理四六级考前必背知识点【精简版】
  6. 234. Palindrome Linked List
  7. 通过运行示例从WSO2 ESB开始
  8. 使用flot绘图出现window.G_vmlCanvasManager is null or not an Object
  9. 超越java jb51_.net mvc超过了最大请求长度的解决方法
  10. php加载memcache模块
  11. publish over ssh、 Kubernetes Continuous Deploy插件
  12. Long-tail Relation Extraction via Knowledge Graph Embeddings and Graph Convolution Networks
  13. xss基础认证钓鱼代码收集
  14. excel提取文字、字母、符号
  15. 有理样条曲线学习笔记(一)
  16. 你只跟你自己同在一条船上
  17. 太原理工大学计算机专业老师,郝晓燕 - 太原理工大学 - 信息与计算机学院
  18. Linux系统安装make命令(错误提醒:Failed to search for file: Cannot update read-only repo)
  19. 戴尔OptiPlex 7060 SSD+HHD+win10和ubuntu双系统安装
  20. jenkins + jmeter +ant 发送邮件失败

热门文章

  1. 【Henu ACM Round#19 A】 Vasya the Hipster
  2. 前端工程师-JavaScript
  3. url传值的一个问题解决
  4. BZOJ3224 Tyvj 1728 普通平衡树
  5. sql server 2008语言基础: 连接查询习题
  6. 各种免费在线工具收集
  7. leetcode(105)从前序遍历和中序遍历构建二叉树
  8. 人工智能-baidu-aip语音识别(语音转文字)
  9. 本周Asp.net源码更新(6.25-6.29)
  10. 只不过窗口没有停留 一闪而过