全局變數
編程術語中的一種
全局變數是編程術語中的一種,源自於變數之分。
變數分為局部與全局,局部變數又可稱之為內部變數。由某對象或某個函數所創建的變數通常都是局部變數,只能被內部引用,而無法被其它對象或函數引用。
全局變數既可以是某對象函數創建,也可以是在本程序任何地方創建。全局變數是可以被本程序所有對象或函數引用。
Global variables
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | int a,b; void f1() { …… } float x,y; int f2() { …… } main() { int maomi(); …… } |
從上例可以看出a、b、x、y都是在函數外部定義的外部變數,都是全局變數。但x,y定義在函數f1之後,而在f1內又無對x,y的說明,所以它們在f1內無效。a,b定義在源程序最前面,因此在f1,f2及main內不加說明也可使用。
全局變數是使用相同的內存塊在整個類中存儲一個值.
全局變數extern與static
extern在其他源程序中也可以使用;static只能在本程序中使用。
全局變數的存在主要有以下一些原因:
1,使用全局變數會佔用更多的內存(因為其生命期長),不過在計算機配置很高的今天,這個不應該算什麼問題,除非使用的是巨大對象的全局變數,能避免就一定要避免。
2,使用全局變數程序運行時速度更快一些(因為內存不需要再分配),同樣也快不了多少。
3,對於局部變數的名字空間污染,這個在不使用太多變數時是可以避免的。
4,當全局變數與局部變數重名的時候,起作用的是局部變數,全局變數被屏蔽掉。
5,還可以用extern在函數外對全局變數聲明,使全局變數的作用域從聲明處到文件的結束。
6,全局變數的優先度低於局部變數。
總之,全局變數可以使用,但是全局變數使用時應注意的是儘可能使其名字易於理解,而且不能太短,避免名字空間的污染;避免使用巨大對象的全局變數。
如下例所示聲明全局變數:
Globaly As String
面向對象語言中的使用
在現代的面向對象語言如Java,C++,C#,Ruby中,由於變數都是封裝在類裡面的,對別的類不可見,所以已經幾乎完全拋棄了全局變數的概念。然而,可以通過把一個類定義為public static,把類成員變數也定義為public static,使該變數在內存中佔用固定、唯一的一塊空間,來實現全局變數的功能。
PHP中預定義了幾個"超級全局變數(superglobals),這意味著它們在一個腳本的全部作用域中都可用。你不需要特別說明,就可以在函數及類中使用。
PHP超級全局變數列表:
• $GLOBALS
• $_SERVER
• $_REQUEST
• $_POST
• $_GET
• $_FILES
• $_ENV
• $_COOKIE
• $_SESSION
變數 | 描述 |
$GLOBAL | $GLOBAL是PHP的一個超級全局變數組,在一個PHP腳本的全部作用域中都可以訪問。 $GLOBAL是一個包含了全部變數的全局組合數組。變數的名字就是數組的鍵。 |
$_SERVER | $_SERVER是一個包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等等信息的數組。這個數組中的項目由Web伺服器創建。不能保證每個伺服器都提供全部項目;伺服器可能會忽略一些,或者提供一些沒有在這裡列舉出來的項目。 |
$_REQUEST | PHP$_REQUEST用於收集HTML表單提交的數據。 |
$_POST | PHP$_POST被廣泛應用於收集表單數據,在HTML form標籤的指定該屬性:"method="post"。 |
$_GET | PHP$_GET同樣被廣泛應用於收集表單數據,在HTML form標籤的指定該屬性:"method="get"。 |