作用域(scope),程式設計概念,通常來說,一段程式程式碼中所用到的名字並不總是有效/可用的,而限定這個名字的可用性的程式碼範圍就是這個名字的作用域。下面我們就為大家介紹一下php變數的作用域。
推薦教學:php入門視訊教學
簡單來說有3種作用域:
區域性作用域 全域性作用域 超全域性作用域
對應有3種變數:區域性變數 全域性變數 超全域性變數
區域性作用域和區域性變數
就是函數內部的作用域範圍,其中的定義的變數就是區域性變數(包括形參也是區域性變數)。
區域性變數只能在其函數內部存取。
區域性變數在函數呼叫結束時,會被自動銷毀(可以理解為函數執行結束,該執行空間也被銷毀了)。
由此可見,函數外部不能存取內部的區域性變數。
靜態變數:一個特殊的區域性變數
含義:
在函數內部,使用static關鍵字修飾的變數。
形式:
function XXX( .... ){ static $s1 = 10; //此時,$s1就是靜態變數 ...... }
靜態變數的特點:
靜態區域性變數的值不會在函數呼叫結束時被銷毀,而是會一直保留。
對比:非靜態的區域性變數在函數呼叫結束時就會被銷毀!
也就是說,當再次呼叫函數時,該變數(的值)還能繼續使用。
全域性作用域與全域性變數
就是函數外部範圍的作用域,其中定義的變數就是全域性變數。
全域性變數只能在其所在的全域性作用域中可以直接使用(存取)。
超全域性作用域與超全域性變數
包括區域性作用域和全域性作用域的整個作用域範圍。
超全域性變數可以在所有範圍中使用(存取)。
實際上,只有有限的10來個系統預定義變數是超全域性變數,包括:$_GET, $_POST, $_REQUEST等。
所以,系統預定義變數,也被統稱為超全域性變數。
一個特別的超全域性變數:$GLOBALS
它也是一個陣列,其中儲存了我們自己定義的所有全域性變數。
每個全域性變數的變數名,就是$GLOBALS陣列的一個單元。
比如:
在全域性作用域中定義如下變數:
$v1 = 1; //這一行執行,就有了一個這個:$GLOBALS[‘v1’], 其值為1 $v2 = ‘abc’; //這一行執行,就有了一個這個:$GLOBALS[‘v2’], 其值為’abc’ $v3 = true; //這一行執行,就有了一個這個:$GLOBALS[‘v3’], 其值為true
作用:
可以讓我們在區域性作用域範圍中,使用全域性變數。
演示如下:
$v1 = 10; //全域性變數 function func1( ){ echo $GLOBALS[‘v1’]; //輸出10; echo $v1; //報錯:變數v1未定義 $s1 = $GLOBALS[‘v1’] * 5; //結果為50; $s2 = $v1 * 5; //報錯:變數v1未定義 }
一個特別的的關鍵字:global
作用:
用於在區域性作用域中,修飾一個跟全域性變數同名的區域性變數。
此時該區域性變數也可以使用全域性變數的值了——實際上他們其實是類似變數參照關係。
其作用類似:$GLOBALS
$a = 10; function sum(){ global $a ; //全域性變數的參照的別名 $a++; $b = $a + 1; echo $b; } sum(); // 12 echo $a ; // 11
以上就是php變數的作用域的詳細內容,更多請關注TW511.COM其它相關文章!