global与$GLOBALS的区别

来源:互联网 发布:源码资本地址 编辑:程序博客网 时间:2024/05/22 03:14
 
<?phpfunction f1() {global $v1,$v2;$v2 = &$v1;echo 'f1函数里:'."<br/>v1:".$v1."<br/>v2:".$v2;}function f2() {$GLOBALS["v3"] = &$GLOBALS["v1"];$v1 = $GLOBALS["v1"];$v3 = $GLOBALS["v3"];echo 'f2函数里:'."<br/>v1:".$v1."<br/>v3:".$v3;}$v1 = 5;$v2 = $v3 = 0;f1();echo "<br/><br/>f1函数之后:<br/>";echo "v1: ".$v1."<br/>";echo "v2: ".$v2."<br/>";echo "<br/>";f2();echo "<br/><br/>f2函数之后:<br/>";echo "v1: ".$v1."<br/>";echo "v3: ".$v3."<br/>";


输出:

f1函数里:
v1:5
v2:5

f1函数之后:
v1: 5
v2: 0

f2函数里:
v1:5
v3:5

f2函数之后:
v1: 5
v3: 5

 

 

php中的函数所产生的变量都是函数的私有变量,那么global关键字产生的变量也肯定逃不出这个规则

例如:

<?phpfunction test() {global $a;unset($a);}$a = 1;test();echo $a;


输出:

1

为什么会输出1呢?不是已经把$a给unset了吗?unset失灵了?php的bug?

都不是,其实unset起作用了,是把test函数中的$a给unset掉了,可以在函数后面加入