人之所以能,是相信能。努力總是會有收穫的。下面是小編整理的PHP中超全域性變數$GLOBALS和global的區別,希望對大家有用,更多訊息請關注應屆畢業生網。 一、超全域性變數$GLOBALS PHP超全域性變數有很多,如下的都屬於超全域性變數(Superglobal): $GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV。 官方說明: $GLOBALS — 引用全域性作用域中可用的全部變數。 一個包含了全部變數的全域性組合陣列。變數的名字就是陣列的鍵。 即出現過的全域性變數,就可以通過$GLOBALS這個陣列取得。 PHP生命週期中,定義在函式體外部的所謂全域性變數,函式內部是不能直接獲得的。 複製程式碼 $foo = "Example content"; test(); function test() { $foo = "local variable"; echo '$foo in current scope: ' . $foo . " "; echo '$foo in global scope: ' . $GLOBALS["foo"] . " "; } 複製程式碼 如上的例子,要訪問外部的$foo必須使用 $GLOBALS陣列。對於通過include檔案進來的外部全域性變數也適用。 php中global也有這樣的功能,它和$GLOBALS的區別在於: global在函式產生一個指向函式外部變數的別名變數,而不是真正的函式外部變數。 $GLOBALS[]確確實實呼叫是外部的變數,函式內外會始終保持一致。 對於類中的成員變數,類中函式必須使用$this->的方式訪問,不能用$GLOBALS方式: global的作用是定義全域性變數,但是這個全域性變數不是應用於整個網站,而是應用於當前頁面,包括include或require的所有檔案。 二、例項講解 複製程式碼 function t1() { global $var1, $var2; $var2 = &$var1; } function t2() { $GLOBALS['var3'] = &$GLOBALS['var1']; } $var1 = 5; $var2 = $var3 = 0; t1(); print $var2 ."n"; t2(); print $var3 ."n"; 複製程式碼 執行結果為: 0 5 為什麼不是2個5而是1個0和1個5呢? 再修改一下例子: 複製程式碼 function t1() { global $var1; $var1 = 2; unset($var1); } function t2() { $GLOBALS['var1'] = 3; unset($GLOBALS['var1']); } $var1 = 1; t1(); print $var1 . "n"; t2(); print $var1 . "n"; 複製程式碼 執行結果只輸入一個2; 1、$GLOBALS是由所有已定義全域性變數自動形成的陣列。變數名就是該陣列的索引。即$GLOBALS['var1']與函式外部的變數$var1是同一個變數,所以將$GLOBALS['var1'] 刪除後,該變數已不存在,所有無法輸出了。 注:$GLOBALS是自動全域性變數。這意味著它在所有的指令碼中都有效。在函式或方法中不需要使用 global $GLOBALS; 來訪問它。 2、"global $var1;"是產生了函式外部$var1的別名變數"$var1",它不是真正的函式外部變數,他只存在於函式的內部,所以即使在函式內將別名變數刪除也不會影響外面的變數,但是可以修改函式外部變數的值。 或許有的人總想知道這個或那個的`區別:在php程式,包括其他程式的學習中,自己動手實驗,根據結果加上的思考,有的時候比上網查詢可能會來得更快一些,更準確一些。下面我們來講一下,php在全域性範圍內訪問變數要怎麼辦? 例一:global定義全域性變數。 複製程式碼 function test_global() { global $var1; $var1 = 'ok'; unset($var1); } test_global(); $var2 = &$var1; unset($var1); echo $var2; 複製程式碼 先不給出結果,自己執行一下程式。函式內部的變數可以訪問到了。從結果可以看出,unset只是斷開變數名與變數值連線,並沒有馬上銷燬變數的值,而且在函式內部定義的全域性變數,實際在外部只是使用了函式內部的別名而已,所以我們在外面依然可以訪問$var1。 例二:$GLOBALS在函式內部訪問函式外面定義的變數。 $waibu = 'out'; function ff() { echo $GLOBALS['waibu']; } ff(); 直接在函式內部使用$waibu是會出錯的。