PHP全局变量global与$GLOBALS的区别和使用
PHP超全局变量如下:
$GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV。
global与$GLOBALS的区别
$GLOBALS
1、项目中可以自定义全局变量,所有的全局变量默认会一起组成一个数组,$GLOBALS就是这个数组的变量名,而那些全局变量的名字就是该数组的键。
2、$GLOBALS在项目的任何地方都可以直接使用。
global
1、在函数内产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量,该变量变化不会影响外部变量。
2、global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。
例一:global和$GLOBALS区别。
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
t1()内的global变量改变不会影响外面的而$GLOBALS会。
例二:global定义全局变量。
function test_global() { global $var1; $var1 = 'ok'; unset($var1); } test_global(); $var2 = &$var1; unset($var1); echo $var2;
输出:ok
可以看出,unset只是断开变量名与变量值连接,并没有马上销毁变量的值,而且在函数内部定义的全局变量,实际在外部只是使用了函数内部的别名而已,所以我们在外面依然可以访问$var1。
例三:$GLOBALS在函数内部访问函数外面定义的变量。
$waibu = 'out'; function ff() { echo $GLOBALS['waibu']; } ff();
$waibu = 'out'; function ff() { global $waibu; echo $waibu; } ff();
上面两种结果一样,都输出out。