1.7 global关键字与global数组的区别

你也许记得,前面我们提到过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的同名引用或者指针。