global与$GLOBALS
在php中:
$GLOBALS定义:引用全局作用域中可用的全部变量(一个包含了全部全局变量的全局组合数组。变量的名字就是数组的键),与所有其他超全局变量不同,$GLOBALS在PHP代码中任何地方总是可用的,自己可以通过打印$GLOBALS这个变量的结果就知道了。
global:在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量。
例子:
global
&获取值的地址,例如&$var2为$var2的地址。
变量可以传值也可以传地址(加&就传的是地址)。
global定义的别名变量,在函数内部直接操作的是别名变量,而不是变量本身。
<?php
$var1 = 8;
$var2 = 9;
function test(){
global $var1,$var2; //相当于为$var1,$var2传了全局变量中$var1,$var2的地址($var1=&$GLOBALS['var1'])
//也就是让函数内的$var1,$var2分别指向了全局变量的$var1,$var2
$var1 = &$var2; //将$var2的地址(也是全局变量$var2的地址)传给$var1,此时$var1指向$var2(也就是全局变量$var2)
echo "<p>$var1</p>"; //输出为9
}
test();
echo "<p>$var1</p>"; //输出为8,说明
?>
例子:
$GLOBALS
$GLOBALS[]确确实实调用是外部的变量,函数内外会始终保持一致。
$GLOBALS的使用作用在函数本身的值
<?php
$var1 = 5;
$var2 = 8;
function test(){
$GLOBALS['var1'] = $GLOBALS['var2'];
}
test();
echo "<p>$var1</p>"; //输出为8,说明$GLOBALS的使用作用在函数本身的值
?>
&符号的使用:
而对于函数:通常情况下函数内是一个封闭的环境,函数内部是一个独立的环境,在某些特定场合下,需要函数的返回值被外部引用
这时候要考虑用&符号:
<?php
function test_(&$a){
$a = $a + 100;
echo $a; //这里输出的122
}
$a = 22;
test_($a); //此时传入的是$a的地址,所以函数会对$a地址所对应的值直接操作,运行结果为$a=122
$a = $a +22;
echo "<pre>";
echo $a; //打印144;
?>
对比不用&符号时:
<?php
function test_($a){
$a = $a + 100;
echo $a; //这里输出的122
}
$a = 22;
test_($a); //此时传入的是$a,此时函数处理后的值只在函数内部有效
$a = $a +22;
echo "<pre>";
echo $a; //打印44;
?>