天天看點

整理超級全局變量與全局變量的知識

全局變量就是在函數外面定義的變量。不能在函數中直接使用。因為它的作用域不會到函數内部。是以在函數内部使用的時候常常看到類似global $a;

超全局變量作用域在所有腳本都有效。是以,在函數可直接使用。比如 $_GET,$_SERVER都是超全局變量。除$_GET,$_POST,$_SERVER,$_COOKIE等之外的超全局變量儲存在

$GLOBALS數組中。注意,不要誤寫成$_GLOBALS。有點受到$_POST的影響了。

$GLOBAL是一個特殊的php自定義的數組。超級全局變量。跟$_SERVER一樣,都屬于超全局變量。

在手冊中搜尋$GLOBALS 就能查詢超全局變量的具體說明和使用方法

變量名就是該數組的索引。 說明:使用$GLOBALS['a']定義一個超全局變量後。可以使用$a直接通路

手冊中這樣解釋的:

$GLOBALS — References all variables available in global scope 引用所有在全局範圍内的可用的變量

結合例子這樣了解:假如在函數外面定義了一個變量$a。那麼在函數中可用通過$GLOBALS['a']擷取到這個變量的值。是以,$GLOBALS數組裡面就是:使用者定義的所有全局變量。

為什麼稱它為超級全局變量。對比$_POST,在函數裡面可用直接使用。根本不需要使用global語句了。是以$GLOBALS也是這樣的原理,隻是$_POST儲存是post方式傳遞的變量。$GLOBALS儲存的是使用者定義的全局變量。

2001.2.28 了解

之前對超級全局變量了解不對:超級全局變量在所有腳本下有效,這樣表述導緻了了解上細微的偏差。如果在所有腳本下有效,那麼是不是$GLOBALS儲存的超級全局變量,在一個php檔案中定義後,在另一個檔案中還能擷取到。

顯然不會是這樣的。估計受到了$_POST的影響,因為它好像所有人都能去通路到。沒有意識到,你隻能通路到目前處理到的$_POST資料。不可能兩個人同時送出留言,php檔案擷取到post的資料怎麼差別。這個資料隻能是目前線程

的。最後,超級全局變量可以這樣看,因為它是相對于全局變量而言的。比全局變量更一個層次,全局變量不能作用到函數内部。它就解決了這個問題。在其他語言中,全局變量都能作用到函數内部。php語言設計就不是這樣的。

全局變量直接在函數内使用,那麼總得提供一種變量能直接使用的吧。就出來了超級全局變量的概念。