php變數的範圍
變數的範圍也就是它的生效範圍。大部分的 PHP 變數只有一個單獨的使用範圍,也包含了 include 和 require 引入的檔案。當一個變數執行賦值動作以後,會隨著聲明的地區位置差異而有不同的使用範圍。上一章節介紹了php變數函數及函數引用和取值 (Dereference),一般情況下,變數會依據聲明的位置分為局部變數和全域變數兩種。這一章節我們就先介紹局部變數。
什麼局部變數?
局部變數也叫內部變數,是在函數內部聲明的變數,其範圍僅限於函數內部,離開該函數後再使用這個變數就是非法的,程式執行時會出現錯誤的資訊。不僅在函數中聲明的變數是局部變數,為聲明函數而設定的參數因為只能在本函數的內部使用,所以也是局部的變數。區別在於函數的參數具體數值從函數外部獲得(函數被調用時傳入值),而直接在函數中聲明變數只能在函數內部被賦值。但他們的範圍都僅限於函數的內部,因為當每次函數被調用時,函數內部的變數才會被聲明,執行完畢後函數內部的變數都會被釋放。
下面通過一段代碼執行個體來示範一下:
<?php /* * 測試局部變數的示範函數 * $one 需要一個整型的參數,測試是否為局部變數 */ function num($one){ // 在函數內部聲明變數 $two = 2; // 在函數內部使用兩個全域變數 echo "函數內部:$one + $two = ".($one+$two).'<br>' ; } // 調用 num 函數並賦值給參數 num(6); // 在函數外部使用兩個變數,為非法訪問 echo "函數外部:$one + $two = ".($one+$two);?>
以上的程式執行後會輸出以下的結果:
函數內部:6 + 2 = 8 //在函數內部可以訪問內部變數,輸出結果函數外部: + = 0 // 在函數外部不能訪問函數內部的兩個變數,所以無法輸出結果
上面的執行個體中聲明了一個 num() 函數,當調用 num() 函數時才會聲明兩個變數 $one 和 $twe,這兩個變數都是局部變數。變數 $one 是在參數中聲明的並在調用時被賦值,另一個變數 $two 是在函數中聲明的並且直接賦值, 這兩個局部變數只能在函數的內部使用,並輸出計算的結果。當 num()函數執行結束時,這兩個變數就會被釋放。因此在函數外部存取這兩盒變數時是不存在的,所以沒有輸出結果。如果在函數外部需要調用該變數值,必須通過 return 指令將其值傳回至主程式區塊以作後續處理。
其代碼如下所示:
<?php /* * 測試局部變數的示範函數 * $one 需要一個整型的參數,測試是否為局部變數 */ function num($one){ // 在函數內部聲明變數 $two = 2; // 將函數的運算結果使用 return 語句返回到函數調用處 return $one + $two; } // 調用 num 函數並賦值給參數 $one,傳回值付給變數 $sum $sum = num(6); // 在函數外部可以使用函數返回的結果 echo "函數外部使用:$sum";?>
以上的程式執行後會輸出以下的結果:
函數外部使用:8 //獲得函數內部執行結果,在函數外部使用。