最近翻翻php手册补补基础,看到有关静态变量的一段代码稍微有不解:
<?php
function test(){
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
test();
}
$count--;
}
?>
输出内容为12345678910
疑惑:递归每次调用函数本身不是应该重新初始化$count
变量?
搜索相关答案,得出下面的结论
静态变量会在整个执行的过程中最先初始化后再执行后面的代码
也就是说,静态变量的初始化只进行一次,而且是在定义变量时初始化,如果多个定义取最后一次定义的值
举个栗子:
<?php
static $a=1;
echo $a;
static $a=2;
echo $a;
static $a=3;
echo $a;
?>
输出结果为3 3 3
在上面的例子中,静态变量$a的初始值为最后一次定义静态变量时的值,相当于如下代码段:
<?php
static $a=1;
static $a=2;
static $a=3;
echo $a;
echo $a;
echo $a;
?>
同理,手册中的问题也是不是得到了解决?
若按原来的思路,不妨加个判断验证下:
<?php
function test()
{
static $count = 0;
if ($GLOBALS[$count]==5)
{
static $count=8;
}
$count++;
echo $count;
if ($count < 10)
{
test();
}
$count--;
}
test();
?>
输出结果 9 10
,果然,最后一次定义为static $count=8;
初值为8,只进行两遍递归