global与$GLOBALS的区别
首先,我们来看一下global的正确用法:在一个函数中引入外部的一个变量,如果该变量没有通过参数传递进来,那么就通过global引入进来。" 也就是说,当一个函数引用一个外部变量时,可以在函数内通过global来声明该变量,这样该变量就可以在函数中使用了 (相当于当作参数传递进来)。
$a = 3;
function aa(){
global $a;
echo $a; // 3
}
aa();
在函数体内定义global $a ,就可以接收在本页面定义的$a。
global $a;
$a=123;
function f()
{
echo $a; //错误,
}
f();
//再看看下面一例
function f()
{
global $a;
$a=123;
}
f();
echo $a; //正确,可以使用
总结:global定义在函数体内,该变量在函数外面可以正常使用。global定义在函数外面,在函数体内不能使用。
$GLOBALS[]
$a =1;
$b =2;
function aa(){
$GLOBALS['a'] = $GLOBALS['a'] + $GLOBALS['b'];
}
aa();
echo $a;
在$GLOBALS数组中,每一个变量成为一个元素,变量名为键名,变量值为对应的键值。
原来以为global和$GLOBALS除了写法不一样以为,其他都一样,可是在实际应用中发现,2者的区别还是很大的!
先看下面的例子:
<?php
$var1 = 1;
$var2 = 2;
function test(){
global $var1, $var2;
$var2 = &$var1;
echo $var2;
$var2 = 'snsgou.com';
}
test(); // 输出 1
echo $var2; // 输出 2
echo $var1; // 输出 snsgou.com
?>
test()函数中的$var1,$va2都是局部变量,只不过是加了global关键字后,分别引用指向全局变量$var1,$va2了,当 $var2 = &$var1; 时,局部变量$var2不再指向全局变量$val2,而重新指向全局变量$var1,换句话来说,局部变量$var2的改变,不会再影响到全局变量$val2,而会影响到重新指向的全局变量$val1。