最近翻翻php手冊補(bǔ)補(bǔ)基礎(chǔ),看到有關(guān)靜態(tài)變量的一段代碼稍微有不解:
<?php
function test(){
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
test();
}
$count--;
}
?>
輸出內(nèi)容為12345678910
疑惑:遞歸每次調(diào)用函數(shù)本身不是應(yīng)該重新初始化$count
變量?
搜索相關(guān)答案,得出下面的結(jié)論
靜態(tài)變量會在整個(gè)執(zhí)行的過程中最先初始化后再執(zhí)行后面的代碼
也就是說,靜態(tài)變量的初始化只進(jìn)行一次,而且是在定義變量時(shí)初始化,如果多個(gè)定義取最后一次定義的值
舉個(gè)栗子:
<?php
static $a=1;
echo $a;
static $a=2;
echo $a;
static $a=3;
echo $a;
?>
輸出結(jié)果為3 3 3
在上面的例子中,靜態(tài)變量$a的初始值為最后一次定義靜態(tài)變量時(shí)的值,相當(dāng)于如下代碼段:
<?php
static $a=1;
static $a=2;
static $a=3;
echo $a;
echo $a;
echo $a;
?>
同理,手冊中的問題也是不是得到了解決蓄诽?
若按原來的思路,不妨加個(gè)判斷驗(yàn)證下:
<?php
function test()
{
static $count = 0;
if ($GLOBALS[$count]==5)
{
static $count=8;
}
$count++;
echo $count;
if ($count < 10)
{
test();
}
$count--;
}
test();
?>
輸出結(jié)果 9 10
,果然,最后一次定義為static $count=8;
初值為8,只進(jìn)行兩遍遞歸