测试程序如下:

function &getObj_ref(){

static $obj;

static $id = 1;

if(empty($obj)){

$obj = new stdClass();

//$obj->name =

get_class($obj);

//$obj->id =

$id++;

$obj->time =

time();

}

return $obj;

}

function getObj(){

static $obj;

static $id = 1;

if(empty($obj)){

$obj = new stdClass();

//$obj->name =

get_class($obj);

//$obj->id =

$id++;

$obj->time =

time();

}

return $obj;

}

function foo() {

static

$a;

$a++;

echo

"$a\n";

unset($a);

}

$obj_ref = getObj_ref();

var_dump($obj_ref);

unset($obj_ref);

var_dump($obj_ref);

$obj_ref2 = getObj_ref();

var_dump($obj_ref2);

echo "-------------\n";

$obj = getObj();

var_dump($obj);

unset($obj);

var_dump($obj);

$obj2 = getObj();

var_dump($obj2);

echo "-------------\n";

foo();

foo();

foo();

得到的结果如下:

X-Powered-By: PHP/5.2.10 ZendServer

Set-Cookie:

ZendDebuggerCookie=127.0.0.1%3A10137%3A0||084|77742D65|1015;

path=/

Content-type: text/html

object(stdClass)#1 (1) {

["time"]=>

int(1274961151)

}

NULL

object(stdClass)#1 (1) {

["time"]=>

int(1274961151)

}

-------------

object(stdClass)#2 (1) {

["time"]=>

int(1274961151)

}

NULL

object(stdClass)#2 (1) {

["time"]=>

int(1274961151)

}

-------------

1

2

3

程序和对应的结果分成三部分:返回静态变量的引用,返回静态变量,在函数内部unset;

getObj_ref函数和getObj函数虽然是两个不同的函数,但是它们的静态局部变量竟然是同一个对象。

这应该是PHP优化的结果。也可能是个BUG。从外部unset都没有用,静态变量仍然在那,下次调用

此函数的时候,返回的仍然是那个变量。

而foo函数内部unset也是没用的,$a的值仍然保留,以至于下次调用foo函数的时候,得到了增加的值。

可见unset是无法删除静态变量的。

这可能是个BUG吗?

php5 unset,PHP 中的 unset--删不掉的静态变量相关推荐

  1. 计算机回收站怎么设计无法删除,电脑回收站中ai文件删不掉如何解决? ai文件在回收站删不掉的解决办法...

    电脑回收站中ai文件删不掉该怎么办?在清理电脑回收站的时候,发现很多.ai文件都删不掉,粉碎也不行,这是怎么回事?下面我们来看看ai文件在回收站删不掉的解决办法,具体内容如下 一些做平面设计的用户可能 ...

  2. wwwroot中的文件删不掉

    wwwroot中的文件删不掉 很简单! 关闭IIS即可!

  3. win7中删除桌面删不掉的IE图标方法

    Win键+R键打开运行窗口,然后输入regedit,点确定打开注册表编辑器,找到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersi ...

  4. python中静态变量和静态方法_【开发者笔记】python中的类方法(@classmethod)和静态方法(@staticmethod)...

    在java.c#等高级语言中我们用static来定义静态方法和静态变量,那么在python中如何定义静态方法和静态变量呢. python提供了@classmethod和@staticmethod来定义 ...

  5. 非静态方法可以访问Java中的静态变量/方法吗?

    "非静态方法可以访问静态变量或调用静态方法"是Java中有关静态修饰符的常见问题之一,答案是, 是的 ,非静态方法可以访问静态变量或调用静态方法. Java中的方法. 这没有问题, ...

  6. c语言静态函数调用静态变量_C语言中的静态变量和函数

    c语言静态函数调用静态变量 C中的静态变量 (Static Variables in C) Basically, when static variables are declared, they cr ...

  7. C语言中的静态变量和静态函数

    C中的静态变量 基本上,声明静态变量时,它们仅创建它们的单个副本,也称为类变量 .它们保留在相应范围内分配的值,并且不会在其新范围内再次初始化变量. 静态变量在代码执行期间保留在内存空间中. 静态变量 ...

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

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

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

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

最新文章

  1. 基于Spark的移动用户主要活动地点的挖掘算法实现以及JavaEE技术整合
  2. thinkphp几个表的数据合并,并用数组分页
  3. pr如何处理音效_Pr基础全通关:从0到1,进阶剪辑大神
  4. 上海教师计算机等级要求,计算机考试阅卷教师谈等级考试
  5. ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
  6. 排序序列排序算法总结(二)——快速排序、归并排序
  7. The only difference is that they are written
  8. 基于Matlab的车型识别(GUI界面)
  9. npm i出错解决Cannot read properties of null (reading ‘pickAlgorithm‘)
  10. Windows Server 2008搭建FTP服务
  11. mongodb php auth,mongodb 3.0改变了authMechanism
  12. 水果店快开业怎么发朋友圈,水果店开业怎么发朋友圈图片
  13. 冠希老师看了会流泪,分布式存储爱我你怕了吗?
  14. 2021年中国纺织钩环市场趋势报告、技术动态创新及2027年市场预测
  15. 墨刀教程:如何快速制作一个App首页原型?
  16. traceroute 安装及使用
  17. LeetCode 844 题解
  18. 《生物化学与分子生物学》----糖类----听课笔记(二)
  19. Mybatis之高级映射【一对多映射】
  20. GOF23之桥接模式

热门文章

  1. word多级列表应用
  2. 激光SLAM面试合集
  3. 智能风控系统设计与实践
  4. 很久没写了,发个策划书如何?
  5. Mac OS X El Captain上安装MySQLdb
  6. 你是如何对待植物神经紊乱的?
  7. 以吃货联盟初级改版为例,(面向对象初级程序设计模拟网上点餐控制台程序(第一版未使用工具辅助类)。
  8. 一个1x1px大小Data/Base64数据的gif透明图片
  9. 使用Python完成自动录入信息
  10. 服务器 报警以及相关信息 预案,服务器故障应急预案