全局變數

編程術語中的一種

全局變數是編程術語中的一種,源自於變數之分。

變數分為局部與全局,局部變數又可稱之為內部變數。由某對象或某個函數所創建的變數通常都是局部變數,只能被內部引用,而無法被其它對象或函數引用。

全局變數既可以是某對象函數創建,也可以是在本程序任何地方創建。全局變數是可以被本程序所有對象或函數引用。

英文


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伺服器創建。不能保證每個伺服器都提供全部項目;伺服器可能會忽略一些,或者提供一些沒有在這裡列舉出來的項目。
$_REQUESTPHP$_REQUEST用於收集HTML表單提交的數據。
$_POSTPHP$_POST被廣泛應用於收集表單數據,在HTML form標籤的指定該屬性:"method="post"。
$_GETPHP$_GET同樣被廣泛應用於收集表單數據,在HTML form標籤的指定該屬性:"method="get"。