1. 程式人生 > >PHP全域性變數與超級全域性變數區別分析

PHP全域性變數與超級全域性變數區別分析

本文分析了PHP全域性變數與超級全域性變數區別。分享給大家供大家參考,具體如下:

全域性變數就是在函式外面定義的變數。不能在函式中直接使用。因為它的作用域不會到函式內部。所以在函式內部使用的時候常常看到類似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儲存的是使用者定義的全域性變數。

個人理解:

之前對超級全域性變數理解不對:超級全域性變數在所有指令碼下有效,這樣表述導致了理解上細微的偏差。如果在所有指令碼下有效,那麼是不是$GLOBALS儲存的超級全域性變數,在一個php檔案中定義後,在另一個檔案中還能獲取到。

顯然不會是這樣的。估計受到了$_POST的影響,因為它好像所有人都能去訪問到。沒有意識到,你只能訪問到當前處理到的$_POST資料。不可能兩個人同時提交留言,php檔案獲取到post的資料怎麼區別。這個資料只能是當前執行緒的。最後,超級全域性變數可以這樣看,因為它是相對於全域性變數而言的。比全域性變數更一個層次,全域性變數不能作用到函式內部。它就解決了這個問題。在其他語言中,全域性變數都能作用到函式內部。php語言設計就不是這樣的。

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

相關推薦

PHP全域性變數超級全域性變數區別分析

本文分析了PHP全域性變數與超級全域性變數區別。分享給大家供大家參考,具體如下: 全域性變數就是在函式外面定義的變數。不能在函式中直接使用。因為它的作用域不會到函式內部。所以在函式內部使用的時候常常看到類似global $a; 超全域性變數作用域在所有指令碼都有效。所以,在

C語言中全域性變數靜態全域性變數區別

 全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。 這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式, 當一個源程式由多個原始檔組成時,非靜態

static全域性變數普通全域性變數區別?static區域性變數普通區域性變數區別?static函式普通函式區別

static 宣告的變數在C語言中有兩方面的特徵: 1.變數被放在程式的全域性儲存區中,這樣在下一次呼叫的時候還可以保持原來的賦值。這一點是它與堆疊變數和堆變數的區別。 2.變數用static告知編譯器,自己僅在變數的作用範圍內可見。這一點是它與全域性變數的區別。Tips:A.若全域性變數僅在單個C檔案中訪

靜態變數非靜態變數區別

靜態的成員變數與非靜態的成員變數的區別: 作用上的區別: 靜態的成員變數的作用共享一個 資料給所有的物件使用。 非 靜態的成員變數的作用是描述一類事物的公共屬性。 數量與儲存位置上的區別: 靜態成員變數是儲存方法 區記憶體中,而且只會存在一份資料。

java中靜態變數非靜態變數區別

靜態變數與非靜態變數的區別如下: 1.記憶體分配 靜態變數在應用程式初始化時,就存在於記憶體當中,直到它所在的類的程式執行結束時才消亡; 而非靜態變數需要被例項化後才會分配記憶體。 2.生存週期 靜態變數生存週期為應用程式的存在週期; 非靜態變數的存在週期取決於

靜態成員變數普通成員變數區別

1.靜態成員變數是屬於整個類的全域性變數,它不單屬於某一個物件;普通成員變數是屬於類中的物件,它不能被所有物件共享。如: class A{ public:static int x; }; int A::x=10;//注意在定義靜態成員變數x的時候也要加上類名和限定符(A::

普通成員變數靜態成員變數區別、普通成員方法靜態成員方法的區別

1. 類中靜態成員變數與非靜態成員變數的區別 (1).生命週期: 靜態成員變數從類被載入開始到類被解除安裝,一直存在。 普通成員變數只有在類建立物件後才開始存在,物件結束,它的生命也就告終。 (2).共享方式: 靜態成員變數是全類共享的 普通成員變數是每個物件單獨享用的 2

Vue全域性元件區域性元件的區別

1、元件宣告<!-- 全域性元件模板father模板 --> <template id="father"> <div> <h3>這是{{name}}</h1> <di

PHP中elseifelse if的區別

else elseif if 在PHP中,正常情況下elseif和else if的用法及效果是一樣的,但在使用帶冒號的if語句時(也就是php替代)情況會有點不一樣,比如:<?php /*正確的寫法*/ $a = 1; $b = 2; if ($a > $b): ec

PHP抽象類接口的區別

通過 實現接口 函數 http 不可 其中 ext int 指定 首先,看看什麽是抽象類和接口 抽象類: 定義為抽象的類不能被實例化.任何一個類,如果它裏面至少有一個方法是被聲明為抽象的,那麽這個類就必須被聲明為抽象的。被定義為抽象的方法只是聲明了其調用方式(參數),不能定

Crontab內環境變數Shell環境變數的關係及解決問題的辦法

問題 有時需要用到Crontab的定時任務去執行指令碼,但是發現通過命令(./test.sh)執行Shell檔案的時候,可以獲取Linux的環境變數;可是通過Crontab做的定時任務,無法獲取。 問題剖析 crontab有一個壞毛病,就是它總是不會預設的從使用者profi

linux 環境變數的設定 臨時環境變數長期環境變數

1. 建立臨時環境變數 1.1 關於環境變數的一些命令 2. 建立長期的環境變數 例項

python 可變變數不可變變數區分

轉:https://blog.csdn.net/god_wen/article/details/78423621 不可變變數 我們可以通過下面的例子來感受上面的話   <span style="color:#000000"><code>5245405

php物件(object) 陣列(array) 的區別以及轉換

php中物件和陣列的區別 物件不僅有屬性,還有方法;,物件可以封裝對這些資料的操作,而陣列是辦不到的。 因此:如果是單純存資料,就用陣列,但如果你要定義對這些資料的操作,更建議使用物件! 舉例: 如果你想在操作的資料里加個通用的方法,比如返回值是加密的,或者其它等等功能,這時

靜態變數非靜態變數

靜態的成員變數與非靜態的成員變數的區別: 作用上的區別: 靜態的成員變數的作用共享一個 資料給所有的物件使用。 非靜態的成員變數的作用是描述一類事物的公共屬性。 數量與儲存位置上的區別: 靜態成員變數是儲存方法 區記憶體中,而且只會存在一份資料。 非

PHP鬆散比較嚴格比較的區別詳解

在PHP中相等的比較有兩種,鬆散比較和嚴格比較,當使用鬆散比較時,如果進行比較的兩個運算元型別不同,那麼會對運算元進行適當的型別轉換,如果轉換後的值相同則認為兩個運算元相等。而使用嚴格比較時,如果兩個運算元的型別不同,就認為是不想等的,如果型別相同且值也相同才會認為兩個運算元相等。    

php中constdefine的使用區別

     常量是一個簡單值的識別符號(名字)。如同其名稱所暗示的,在指令碼執行期間該值不能改變(除了所謂的魔術常量,它們其實不是常量)。常量預設為大小寫敏感。通常常量識別符號總是大寫的。     可以用 define() 函式來定義常量。在 PHP 5.3.0 以後,可

php中time()$_SERVER[REQUEST_TIME]用法區別

本文例項詳細講述了php中time()與$_SERVER[REQUEST_TIME]用法的區別。分享給大家供大家參考。具體分析如下: 簡單的說time()與$_SERVER["REQUEST_TIME"]都是獲得時間的,但time返回當前的 Unix 時間戳而$_SERVE

node.js中exportsmodule.exports的區別分析

前言 關於Node.js中的exports和module.exports,很多時候都比較容易讓人混淆,弄不清楚兩者間的區別。那麼我們就從頭開始理清這兩者之間的關係。 來源 在開發Node.js應用的時候,很多模組都是需要引入才能使用,但是為什麼exports和module.exports我們沒有引用卻可

PHP全域性變數SESSION 漏洞(global session)

先看這一段簡單的程式碼 <?php session_start();$_SESSION[‘isadmin’]=’yes’;$isadmin=’no’;echo $_SESSION[‘isadmin’];?> 當php.ini裡配置register_globals = Off 時, 沒任何問題, 輸