變數範圍即它定義的上下文背景(也就是它的生效範圍)。在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中文網其他相關文章!