2012-08-27 62 views
3

在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

但我希望它是以下几点:

这里是一个:空
这里是一个:100


这里是:100
这里是一个:100

我一直在思考小时试图解释为什么我收到上述结果,但真正的失败。 你能告诉我为什么我们有上面的结果吗?谢谢!

+0

看起来静态变量的显式定义首先被识别(就像函数一样)。 –

+0

我从来没有见过像这样的函数中定义的静态。通常它们在类上下文中定义,然后在成员方法内部或类外部引用。 –

回答

1

很难相信您指定的输出确实是该代码的输出。然而,问题是在这里明确:

一个static变量通过static关键字绑定到一个函数或类和声明。您正在重新申报$a;这应该(我猜)会发出警告。

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

仅在第一次调用函数$a分配的23值。在第一个echo声明之后。

这是一个两步骤过程,第一解析器将读取功能的定义,包括static性质。之后,代码将运行,并且属性发生变化。