global在函数内产生一个指向函数外部变量的别名变量(指向外部变量的引用),而不是真正的函数外部变量
$GLOBALS[]确确实实调用是外部的变量,函数内外会始终保持一致!
function test_global() {
global $var1, $var2; //var1,var2保存的是外部同名变量的引用
$var2 =& $var1;
}
function test_globals() {
$GLOBALS['var3'] =& $GLOBALS['var1'];//操作的是实际的变量
}
$var1 = 5;
$var2 = $var3 = 0;
test_global();
echo $var2;
echo "\n";
test_globals();
echo $var3;
//结果为 0 5
global $var1, $var2; //var1,var2保存的是外部同名变量的引用
$var2 =& $var1;
}
function test_globals() {
$GLOBALS['var3'] =& $GLOBALS['var1'];//操作的是实际的变量
}
$var1 = 5;
$var2 = $var3 = 0;
test_global();
echo $var2;
echo "\n";
test_globals();
echo $var3;
//结果为 0 5
例子2:
function test_1() {
global $var1; //相当于在外边创建了一个同名变量,而这个变量是外边变量的引用
$var1=2;
unset($var1); //只是取消了到外边变量的引用
}
function test_2() {
$GLOBALS['var1'] =3; //在外边创建$var1变量,此时操作的就是外部的变量
//unset($GLOBALS['var1']); //删除外边变量
}
$var1 = 1;
test_1();
print $var1;
echo "\n";
test_2();
print $var1;
global $var1; //相当于在外边创建了一个同名变量,而这个变量是外边变量的引用
$var1=2;
unset($var1); //只是取消了到外边变量的引用
}
function test_2() {
$GLOBALS['var1'] =3; //在外边创建$var1变量,此时操作的就是外部的变量
//unset($GLOBALS['var1']); //删除外边变量
}
$var1 = 1;
test_1();
print $var1;
echo "\n";
test_2();
print $var1;
#这两种方式都可以改变 全局变量 $g 的值 $g = 123; function test() { // global $g; $g = 456; // $GLOBALS['g'] = 456; } test(); echo $g; #456