PHP超全局变量有很多,如下的都属于超全局变量Superglobal
$GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV。
官方说明:
$GLOBALS — 引用全局作用域中可用的全部变量。
一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
即出现过的全局变量,就可以通过$GLOBALS这个数组取得。
PHP生命周期中,定义在函数体外部的所谓全局变量,函数内部是不能直接获得的。
- <?php
- $foo = "Example content";
- test();
- function test() {
- $foo = "local variable";
- echo '$foo in current scope: ' . $foo . "<br>";
- echo '$foo in global scope: ' . $GLOBALS["foo"] . "<br>";
- }
如上的例子,要访问外部的$foo必须使用 $GLOBALS数组。对于通过include文件进来的外部全局变量也适用。
php中global也有这样的功能。它和$GLOBALS的区别在于。
global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量。
$GLOBALS[]确确实实调用是外部的变量,函数内外会始终保持一致!
对于类中的成员变量,类中函数必须使用$this->的方式访问,不能用$GLOBALS方式:
- <?php
- test{
- public $count=0;
- public function add(){
- $this->count=$this->count+2;
- return $this->count;
- }
- }
- $a=new test();
- echo $a->add();
- ?>
而不能直接如下写法
$count=$count+2;
return $count;
- <?php
- $foo = "Example content";
- test();
- function test() {
- unset( $GLOBALS["foo"] );
- }
- echo $foo;
上述代码运行,会报错:Undefined variable: foo。说明$GLOBALS["foo"]就是外面的$foo本身。
- <?php
- $foo = "Example content";
- test();
- function test() {
- global $foo;
- unset($foo);
- }
- echo $foo;
上述代码改成了global方式,运行后,成功打印出Example content
说明unset并未真正释放掉$foo变量。
本文转自cnn23711151CTO博客,原文链接:http://blog.51cto.com/cnn237111/1043302 ,如需转载请自行联系原作者