php 中 global 与 $GLOBAL 的区别

时间:2023-03-09 19:58:30
php 中 global 与 $GLOBAL 的区别

很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然。

根据官方的解释是
$GLOBALS['var'] 是外部的全局变量$var本身。

global $var 是外部$var的同名引用。


例一

$var1 = 1;
$var2 = 2;

function test(){
    $GLOBALS['var2'] = &$GLOBALS['var1'];
}

test();
echo $var2; //输出 1

正常输出 1

例二

$var1 = 1;
$var2 = 2;

function test(){
    global $var1,$var2;
    $var2 = &$var1;
    echo $var2;
    $var2 = "Ray";
}

test(); //输出 1
echo $var2; //输出 2
echo $var1; //输出 Ray

test()函数中的$var1,$va2都是局部变量,只不过是加了global关键字后,分别引用指向全局变量$var1,$va2了,当 $var2 = &$var1; 时,局部变量$var2不再指向全局变量$val2,而重新指向全局变量$var1,换句话来说,局部变量$var2的改变,不会再影响到全局变量$val2,而会影响到重新指向的全局变量$val1。

例三

$var1 = 1;
function test(){
    unset($GLOBALS['var1']);
}

test();
echo $var1;

因为$var1被删除了,所以什么东西都没有打印并报错。

例四

$var1 = 1;
function test(){
    global $var1;
    unset($var1);
}

test();
echo $var1; //输出 1

证明删除的只是别名,$GLOBALS['var']的引用,起本身的值没有受到任何的改变。

也就是说 global $var 其实就是$var = &$GLOBALS['var']。

调用外部变量的一个别名而已。