3

在 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

但我希望它是以下内容:

here is a: null
here is a: 100


here is a: 100
here is a: 100

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

4

1 回答 1

1

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

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

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

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

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

于 2012-08-27T16:41:24.370 回答