你也许记得,前面我们提到过global关键字和global数组。那么问题来了,它们长得如此像,似乎功能也相同,到底有什么区别?我们分别来看一下。
$GLOBALS['var']是外部的全局变量本身,global$var是外部$var的同名引用或者指针,如代码清单1-7所示:
代码清单1-7 删除全局变量
<?php $var1 = 1; function test(){ unset($GLOBALS['var1']); } test(); echo $var1; ?>
因为$var1变量被删除,所以没有内容显示出来。请再看如下代码:
<?php $var1 = 1; function test(){ global $var1; unset($var1); } test(); echo $var1; ?>
此段代码意外地打印了1。这是为什么?因为删除的只是个别名引用,其本身的值并没有任何更改。
global$var与&$GLOBALS['var']等价,相当于调用外部变量的一个别名,所以上面代码中的$var1和$GLOBALS['var1']指向的是同一个变量。
PHP的全局变量和C有一点点不同。在C语言中的全局变量在函数体内无效。而在PHP中,在函数中想调用外部全局变量时可用global声明。PHP的“全局”不是指整个网站,而是应用于当前页面,包括include或require的全部文件。
综合以上内容,我们总结出如下结论:
·$GLOBALS['var']是外部的全局变量本身。
·global$var是外部$var的同名引用或者指针。