變數的活動範圍_PHP
來源:互聯網
上載者:User
關鍵字
範圍
活動
變數
函數
全域
Test
變數的活動範圍僅僅限於定義它的上下文。對於絕大多數部分中所有的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--;
}