PHP静态范围重新声明

时间:2012-08-27 16:34:01

标签: php

我在PHP函数中使用静态作用域时得到了这个例子:

function testStatic() {
static $a;
echo "here is a first time: ".$a."<br />";
$a = 23;
static $a = 100;
echo "here is a second time: ".$a."<br />";
}

当我像这样运行这个函数时

teststatic(); echo "<hr />";
teststatic();

输出结果如下:

这里是:100
这是一个:23

<小时/> 这是一个:23
这是一个:23

但我希望它如下:

这是一个:null
这是一个:100

<小时/> 这是一个:100
这是一个:100

我一直在想几小时试图解释为什么我收到了上面的结果,但确实失败了。 你能告诉我为什么我们有上面的结果吗?谢谢!

1 个答案:

答案 0 :(得分:1)

很难相信您指出的输出实际上是该代码的输出。但问题很清楚:

static变量绑定到函数或类,并通过static关键字声明。你重新宣布$a;这应该(我猜)提出警告。

由于static属性是函数或类的定义的一部分,(显然)它的最后一次出现将“附加”到相关的函数/类中。

仅在第一次调用函数$a时,才会为23赋值。在第一个echo语句之后。

这是一个两步过程,首先解析器将读取函数的定义,包括static属性。之后代码将运行,属性发生变异。