PHP學習:PHP超全域性變數(Superglobal)$GLOBALS的介紹以及和global的區別

技術小甜發表於2017-11-01

PHP超全域性變數有很多,如下的都屬於超全域性變數Superglobal

$GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV。

官方說明:

$GLOBALS — 引用全域性作用域中可用的全部變數。

一個包含了全部變數的全域性組合陣列。變數的名字就是陣列的鍵。

即出現過的全域性變數,就可以通過$GLOBALS這個陣列取得。

PHP生命週期中,定義在函式體外部的所謂全域性變數,函式內部是不能直接獲得的。

 


  1. <?php  
  2. $foo = “Example content”;  
  3. test();  
  4. function test() {  
  5.     $foo = “local variable”;  
  6.     echo `$foo in current scope: ` . $foo . “<br>”;  
  7.     echo `$foo in global scope: ` . $GLOBALS[“foo”] . “<br>”;  

 

如上的例子,要訪問外部的$foo必須使用 $GLOBALS陣列。對於通過include檔案進來的外部全域性變數也適用。

php中global也有這樣的功能。它和$GLOBALS的區別在於。

global在函式產生一個指向函式外部變數的別名變數,而不是真正的函式外部變數。

$GLOBALS[]確確實實呼叫是外部的變數,函式內外會始終保持一致!

對於類中的成員變數,類中函式必須使用$this->的方式訪問,不能用$GLOBALS方式:


  1. <?php  
  2. test{  
  3.     public $count=0;  
  4.     public function add(){  
  5.         $this->count=$this->count+2;  
  6.         return $this->count;  
  7.     }  
  8. }  
  9. $a=new test();  
  10. echo $a->add();  
  11. ?> 

而不能直接如下寫法

$count=$count+2;

return $count;


  1. <?php  
  2. $foo = “Example content”;  
  3. test();  
  4. function test() {  
  5. unset( $GLOBALS[“foo”] );  
  6. }  
  7. echo $foo

上述程式碼執行,會報錯:Undefined variable: foo。說明$GLOBALS[“foo”]就是外面的$foo本身。


  1. <?php  
  2. $foo = “Example content”;  
  3. test();  
  4. function test() {  
  5. global $foo;  
  6. unset($foo);  
  7. }  
  8. echo $foo

上述程式碼改成了global方式,執行後,成功列印出Example content

說明unset並未真正釋放掉$foo變數。


本文轉自cnn23711151CTO部落格,原文連結:http://blog.51cto.com/cnn237111/1043302 ,如需轉載請自行聯絡原作者


相關文章