php5 unset,PHP 中的 unset--删不掉的静态变量
测试程序如下:
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--删不掉的静态变量相关推荐
- 计算机回收站怎么设计无法删除,电脑回收站中ai文件删不掉如何解决? ai文件在回收站删不掉的解决办法...
电脑回收站中ai文件删不掉该怎么办?在清理电脑回收站的时候,发现很多.ai文件都删不掉,粉碎也不行,这是怎么回事?下面我们来看看ai文件在回收站删不掉的解决办法,具体内容如下 一些做平面设计的用户可能 ...
- wwwroot中的文件删不掉
wwwroot中的文件删不掉 很简单! 关闭IIS即可!
- win7中删除桌面删不掉的IE图标方法
Win键+R键打开运行窗口,然后输入regedit,点确定打开注册表编辑器,找到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersi ...
- python中静态变量和静态方法_【开发者笔记】python中的类方法(@classmethod)和静态方法(@staticmethod)...
在java.c#等高级语言中我们用static来定义静态方法和静态变量,那么在python中如何定义静态方法和静态变量呢. python提供了@classmethod和@staticmethod来定义 ...
- 非静态方法可以访问Java中的静态变量/方法吗?
"非静态方法可以访问静态变量或调用静态方法"是Java中有关静态修饰符的常见问题之一,答案是, 是的 ,非静态方法可以访问静态变量或调用静态方法. Java中的方法. 这没有问题, ...
- c语言静态函数调用静态变量_C语言中的静态变量和函数
c语言静态函数调用静态变量 C中的静态变量 (Static Variables in C) Basically, when static variables are declared, they cr ...
- C语言中的静态变量和静态函数
C中的静态变量 基本上,声明静态变量时,它们仅创建它们的单个副本,也称为类变量 .它们保留在相应范围内分配的值,并且不会在其新范围内再次初始化变量. 静态变量在代码执行期间保留在内存空间中. 静态变量 ...
- php的foreach循环执行过程分析以及循环中执行unset()的一些问题
文章目录 一.前言 二.foreach的执行过程 1.关于版本不同的foreach变化 2.关于引用计数 3.探寻foreach的运行过程 三.foreach中执行unset()的问题 1.当我们是为 ...
- PHP如何让内存不释放,PHP中使用unset销毁变量并内存释放问题
代码如下: for ( $i = 1; $i < 100; $i++ ) { $str = str_repeat('01234567', $i); $a = memory_get_usage() ...
最新文章
- 基于Spark的移动用户主要活动地点的挖掘算法实现以及JavaEE技术整合
- thinkphp几个表的数据合并,并用数组分页
- pr如何处理音效_Pr基础全通关:从0到1,进阶剪辑大神
- 上海教师计算机等级要求,计算机考试阅卷教师谈等级考试
- ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
- 排序序列排序算法总结(二)——快速排序、归并排序
- The only difference is that they are written
- 基于Matlab的车型识别(GUI界面)
- npm i出错解决Cannot read properties of null (reading ‘pickAlgorithm‘)
- Windows Server 2008搭建FTP服务
- mongodb php auth,mongodb 3.0改变了authMechanism
- 水果店快开业怎么发朋友圈,水果店开业怎么发朋友圈图片
- 冠希老师看了会流泪,分布式存储爱我你怕了吗?
- 2021年中国纺织钩环市场趋势报告、技术动态创新及2027年市场预测
- 墨刀教程:如何快速制作一个App首页原型?
- traceroute 安装及使用
- LeetCode 844 题解
- 《生物化学与分子生物学》----糖类----听课笔记(二)
- Mybatis之高级映射【一对多映射】
- GOF23之桥接模式