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变量。