變量的活動范圍僅僅限於定義它的上下文。對於絕大多數部分中所有的PHP變量僅僅只有單獨的活動范圍。然而,在用戶自定義的函數中,引入了一個本地函數范圍的概念。在這個函數中使用的任何變量缺省被限制在該函數的本地函數范圍之中。例如:
$a = 1; /* global scope */
Function Test () {
echo $a; /* reference to local scope variable */ }
Test ();
這段腳本將不會造成任何的輸出,因為給顯示的提交給本地譯文的變量“$a”的申明,同時這個變量沒有在它的活動范圍中被指定一個值。您可以注意到這和C語言有一些不同,在C語言中全局變量是自動被設定為可用的,除非在函數中進行了特別的說明。由於人們可能會不小心的改變了全局變量的值,所以這可會在程序中導致許多問題。在PHP中全局變量必須在一個函數中被公告,如果想要在這個函數中使用它的話。例子如下:
$a = 1;
$b = 2;
Function Sum () {
global $a, $b;
$b = $a + $b;
}
Sum ();
echo $b;
上面的腳本將輸出“3”。在函數中申明了全局變量$a和$b,任何對這兩個變量的引用都被指定到了該全局變量。這裡沒有函數可以操作的限制全局變量的數目。
第二種接受全局變量的方法是使用PHP特殊的定義數組$GLOBALS,例子如下所示:
$a = 1;
$b = 2;
Function Sum () {
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Sum ();
echo $b;
$GLOBALS數組是一個聯合數組使用“global”為變量的名字,全局變量作為該變量數組其中某個元素的值。
另一個關於變量活動范圍的重要特性是“靜態變量”。一個靜態變量僅僅在本地函數的活動范圍中存在,但是當程序離開這個范圍時,它的值並不丟失。請參考下面的例子:
Function Test () {
$a = 0;
echo $a;
$a++;
}
這個函數每次被調用時都把變量$a置為0同時打印“0”,所以幾乎是沒有作用的。表達式“$a++”將增加變量的值,但是每次退出函數時變量$a就消失了。想要使用一個不丟失當前計算的記數函數,用戶可以將變量$a設置為靜態的,示例如下:
Function Test () {
static $a = 0;
echo $a;
$a++;
}
現在,每一次當Test()函數被調用的時候,它將打印出變量$a和它當時增加之後的數值。
當函數被遞歸調用的時候,使用靜態變量是一種很重要的方法。遞歸函數就是可以調用自身的函數。當編寫遞歸函數的時候,必須注意可能會發生的循環定義。您必須有一個適當的方法來中斷這個遞歸過程。下面的例子遞歸了10次:
Function Test () {
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test (); }
$count--;
}