php中$GLOBALS和global的区别

$GLOBALS[‘var’]是外部变量的本身.
global 是外部变量的一个引用.
以下是几个例子:

//例子1 定义了两个全局变量,$GLOBALS['var2']就是全局变量$var2本身,$GLOBALS['var2']引用指向了全局变量$var1,$var2发生改变,$var1也就发生改变.
$var1 = 5;
$var2 = 10;
function test() {
    $GLOBALS['var2'] = &$GLOBALS['var1'];
} 
test(); 
echo $var2;//输出5
$var2=20;
echo $var1;//输出20
//例子2 
$var1=5;
$var2=10;
function test(){
	//声明两个变量,引用自全局$var1,$var2.
	global $var1,$var2;
	echo $var1,$var2;//输出5,10
	$var2=&$var1;	//函数内$var2的引用发生改变,之前引用的是外部变量$var2,现在引用到了函数内$var1,也就是外部变量$var1;
	echo $var2;		//输出5
	$var2='this is new variable';//函数内$var2的值发生改变,它引用的$var1变量的值同样就会发生改变.
	echo $var2;		//输出this is new variable;
}
test();
echo $var1;//输出this is new variable;
echo $var2;//输出10 因为函数内$var2变量引用到了$var1,所以全局变量$var2依然是10
//列子3 证明$GLOBALS是外部变量的本身
$var1=5;
function test(){
	$GLOBALS['var1']=10; 
}
test();
echo $var1;//输出10 因为函数内$GLOBALS['var1']改变了这个值;
unset($GLOBALS['var1']);
echo $vaar1;//报一个未定义的变量
//列子4 证明global声明变量是全局变量的引用
$var1=5;
$var2=10;
function test(){
	global $var1,$var2;
	echo $var1,$var2;
	unset($var1);//删除了函数内$var1 只是断开了和$var1对应值的联系,全局$var1不受影响.
}
test();
echo $var1;//这里输出5
die;
//例子5 参数按照引用传递,var之前试var1的引用,$var = &$GLOBALS["var2"]改变了引用到var2,和全局的var1没有联系了.
$var1 = 5;
function foo(&$var) {
    $GLOBALS["var2"] = 10;
    $var = &$GLOBALS["var2"];
}
foo($var1); 
echo $var1;//输出5
die;

猜你喜欢

转载自blog.csdn.net/hejinshan12/article/details/88972381