在做網(wǎng)站中變量都必須在有效的范圍內(nèi)使用,如果超出有效范圍,則變量就失去意義。變量的作用域如下表所示。
例如,在下面示例中,函數(shù)體內(nèi)是無法引用全局變量的。
<?php$a = 1; //聲明全局變量function test(){ echo $a; //引用全局變量,則無效}test(); //調(diào)用函數(shù),顯示為空?>
但是,如果在函數(shù)體使用global關(guān)鍵字聲明變量之后,則可以在函數(shù)內(nèi)引用全局變量。
<?php$a = 1; //聲明全局變量function test(){ global $a; //聲明全局變量 echo $a; //引用全局變量,有效}test(); //調(diào)用函數(shù),顯示為1?>
靜態(tài)變量僅在局部函數(shù)域中存在,但當(dāng)程序執(zhí)行離開此作用域時(shí),其值并不會(huì)丟失。例如,在下面示例中靜態(tài)變量$count能夠持續(xù)存儲(chǔ)現(xiàn)在疊加的值。
<?phpfunction test(){ static $count = 0; //聲明靜態(tài)變量 $count++; //遞加變量值echo $count; //顯示變量值 if ($count < 10) { //如果變量值小于10,則繼續(xù)調(diào)用函數(shù) test(); }}test(); //調(diào)用函數(shù)echo "<p>";test(); //第二次調(diào)用函數(shù)?>
靜態(tài)變量提供了一種處理遞歸函數(shù)的方法。遞歸函數(shù)是一種調(diào)用自己的函數(shù),用戶在寫遞歸函數(shù)時(shí)要小心,因?yàn)榭赡軙?huì)無窮遞歸下去,所以必須確保有充分的方法來中止遞歸。這個(gè)簡單的函數(shù)遞歸計(jì)數(shù)到10,使用靜態(tài)變量$count來判斷何時(shí)停止,當(dāng)時(shí)即便函數(shù)中止,如果繼續(xù)調(diào)用函數(shù),用戶會(huì)發(fā)現(xiàn)$count的值是從11開始的,而不是0,演示效果如下圖所示。