當我們宣告一個變數時, 這個變數會有它自己有效的視野範圍. 所謂有效視野範就是指我們只有在這個範內才可使用這個變數. 並不是我們建立 的變數都可以在整個程式當中使用. 在不同條件下建立的變數, 其有效視野範圍 會不一樣. 在自建函式里的變數則內定為只有在函式里面才看得到. 例如 :
$a = 1; /* global scope */
Function Test () {
echo $a; /* reference to local scope variable */
}
Test ();
這段程式不會產生任何輸出, 因為 $a 變數為局部(local)變數, 而且沒有指定任何值. 在函式里, 如果要用全域(global)變數則必需用global宣告 . 例如 :
$a = 1;
$b = 2;
Function Sum () {
global $a, $b;
$b = $a + $b;
}
Sum ();
echo $b;
以上的程式會輸出 "3". 這個程式是在函式里用了global 來宣告 $a 和$b 兩個全域(global)變數 .
第二種宣告全域(global)變數的方法是用 $GLOBALS 陣列. 之前的例子可以改成如下 :
$a = 1;
$b = 2;
Function Sum () {
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Sum ();
echo
$GLOBALS 陣列是一個 associative陣列.中括號([ ])里的內容為該 變數的值.
另一個重要的變數為靜態(static)變數. 靜態(static)變數只能在出現在區域(local)函式. 當程式離開該函式時, 靜態(static)變數仍能保留其原來的值 . 請看以下的例子 :
Function Test () {
$a = 0;
echo $a;
$a++;
}
這個程式看起來沒有什麼效用, 因為 $a++ 用來使 $a 增加一沒有作用. 因為當程式離開該函式時, $a的值就不見了. 如果想要保留$a的值, 就得要 宣告成靜態(static) :
Function Test () {
static $a = 0;
echo $a;
$a++;
}
這樣, 每次Test()函式被呼叫時, $a的值就會被列出來和增加一.
在呼叫遞迴函式也需要用到靜態(static) 變數 以下為一個數到10簡單的遞迴函式
Function Test () {
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test ();
}
$count--;
}