搜索
首页 电脑/网络

staralliancePHP中static关键字原理的学习研究分析

全部回答

2023-03-13

0 0

    看PHP手册的时候发现了下面这样一段代码:代码如下:function Test(){static $count = 0;$count++;echo $count;if ($countTest();}$count--;}?>执行结果如下:这是一个递归的函数,声明的静态变量count记录次数,输出1~10。
    我在看的时候有个疑惑,递归调用的时候 static $count = 0; 语句会重复执行,这为什么不会导致count变量被重复赋值呢?带着这个疑问和同事研究了一下,测试用代码如下:代码如下:echo 'start';static $a = 10;echo "$a";unset($GLOBALS['a']);echo "$a";static $a = 20;echo "$a";$GLOBALS['a'] = 10;echo "$a";static $a = 30;echo "$a";unset($GLOBALS['a']);echo "$a";static $a;echo "$a";static $a = 40;echo "$a";$a = 100;echo "$a";static $a = 50;echo "$a";static $a = 4;echo "$a";echo 'end';exit;?>执行结果如下:start4 Notice: Undefined variable: a 4 10 10 Notice: Undefined variable: a 10 10 100 100 100 end(结果中关于文件位置的部分已删去。
    也可以去掉echo语句使用zend的debug功能查看,这样结果更清晰)代码第5行第一次输出$a的值为4,由此推测PHP在页面初始化的时候分配静态变量的内存,此时使用了同一个变量的最后一次声明的值(这个可以把4改为其他数测试)。
  代码第7行调用unset函数销毁变量$a,再次输出$a的值时看到未定义变量的提示,说明变量已经被销毁。  第10行再次输出时,输出结果仍是4而不是20,有两种可能,一个是php再次初始化了$a的值,另一种是php使用了$a被销毁前的值,这个问题在第20行输出的时候解决。
  第16行$a销毁的时候值为10,第19行声明后输出仍为10。第11行将$a的值修改为10,在14行再次声明$a,17行输出认为10。  推测为重复声明时php还是使用静态变量内存中的值,而不再次赋值。
  至此,手册中发现的问题,大致上已经解决了,即递归调用中的声明没有改变$count的值,所以递归在$count=10时成功停止。可能有理解不正确的地方,欢迎拍砖。以上就介绍了star alliance PHP中static关键字原理的学习研究分析,包括了star alliance方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
    。

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
电脑/网络
程序设计
电脑装机
操作系统/系统故障
硬件
笔记本电脑
百度
互联网
反病毒
软件
举报
举报原因(必选):
取消确定举报