PHP静态关键字原理的研究与分析

查看PHP手册,我们发现了代码的下面部分:
复制代码代码如下所示:
< PHP
功能测试()
{
静态$ = 0;
数+;
回波计数;
如果(计数为10){
测试();
}
数美元--;
}
>

执行的结果如下:
这是一个递归函数,它声明静态变量的数量,输出1~10。
当我查看它时,有一个疑问,当递归调用被使用时,静态$=0,句子将重复执行,这不会导致重复赋值的计数变量:
复制代码代码如下所示:
< PHP
echo'start;
静态$ = 10;

unset($ = {'a' });

静态$ = 20;

美元= {'a' } = 10;

静态$ = 30;

unset($ = {'a' });

静态$;

静态$ = 40;

$ = 100;

静态$ = 50;

静态$ = 4;

echo'end;
出口;
>


执行的结果如下:
起点



注意:未定义变量:a



注意:未定义变量:a


一百
一百
一百
终点
(关于该文档的位置已被删除。结果的部分也可以摆脱使用Zend,调试功能的echo语句给出的结果更清楚。)


第五行代码4第一次有$ A的值,推测PHP在初始化页面时分配静态变量的内存。当时,使用的是相同的变量的最后一个值(可换4到其他号码测试),第七行代码调用unset函数销毁变量$,和未定义的变量的值是当看到的美元的价值是再出口,表明变量已被破坏。


当第十行再次汇出时,输出结果仍然是4,而不是20。有两种可能性。一个是PHP,它再次初始化$的值,另一个是PHP在销毁之前使用$。当输出第二十行时,这个问题就解决了。当$第十六行被销毁时,该值为10,第十九行声明仍然为10。


第十一行修改$ A到10的值,并且a $在14行中再次声明,17行输出被认为是10。推测当重复声明不再被分配时,PHP仍然使用静态变量内存中的值。


此时,手册中发现的问题已经基本解决了,也就是说,递归调用中的声明不会改变计数的值,所以递归成功地停止在$=10。


可能不明白的地方,欢迎拍砖。