變數範圍即它定義的上下文背景(也就是它的生效範圍)。在javascript中,並沒有變數範圍這一概念,相似的可能是範圍。但是,由於javscript使用的是詞法範圍,指變數聲明時的位置;而php並不存在變數聲明,變數在第一次賦值時相當於聲明了變數。所以,二者並不相同。本文將詳細介紹php中的變數範圍。
1、局部變數
局部變數是在函數內聲明的變數,其範圍僅限於函數內部。函數的參數也是局部變數,區別在於,函數參數值來自被調用時傳入的值。執行完畢後函數內部的動態變數都將被釋放。
<?php function a($b){ $c = 1; echo "$b+$c = " . ($b+$c) . '<br />'; } a(2);//輸出3 echo $b+$c;//函數外部的非法訪問,報notice錯誤,並輸出0?>
2、全域變數
在函數外定義的變數稱為全域變數,範圍範圍在定義變數開始到本程式檔案的末尾。
另外,在函數中無法直接調用全域變數,需要使用關鍵字global,也可以使用$GLOBALS來代替global。$GLOBALS 是一個超全域變數。
<?php //樣本1 $a = 1; $b = 2; function Sum(){ global $a, $b; $b = $a + $b; } Sum(); echo $b;//輸出的結果是3 //樣本2 $c = 1; $d = 2; function Sum() { $GLOBALS['d'] = $GLOBALS['c'] + $GLOBALS['d']; } Sum(); echo $d;//輸出3?>
3、靜態變數
靜態變數僅在局部函數域中存在,但當程式執行離開此範圍時,其值並不丟失。靜態變數用static來聲明的,未被static聲明的預設是動態變數。其在函數執行完之後,內部的靜態變數已然儲存在記憶體中。僅在指令碼執行期間,第一次調用該函數時被初始化。
<?php function test() { static $a = 0; echo $a; $a++; } test();//輸出0 test();//輸出1?>
靜態變數也提供了一種處理遞迴函式的方法。遞迴函式是一種調用自己的函數。寫遞迴函式時要小心,因為可能會無窮遞迴下去。必須確保有充分的方法來中止遞迴。以下這個簡單的函數遞迴計數到 10,使用靜態變數 $count 來判斷何時停止
<?php function test() { static $count = 0; $count++; echo $count; if ($count < 10) { test(); } $count--; }?>
相關推薦:
php變數範圍
php變數範圍,php全域變數與靜態變數
php變數範圍介紹_PHP教程