关于global和$GLOBALS[]的一些实践
鉴于网上谈论未讲到重点,so
代码示例:
测试1:
1 <?php 2 function test(){ 3 global $var; 4 $var ++; 5 } 6 $var = 1; 7 test(); 8 echo $var;
结果:2
嗯,和自己理解一模一样
测试2:
1 <?php 2 global $var; 3 $var = 1; 4 function test(){ 5 $var ++; 6 } 7 test(); 8 echo $var;
结果:我想你们都知道是神马结果
总结:在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用;
再来:
测试3:
1 <?php 2 $var = 1; 3 function test(){ 4 global $var; 5 unset($var); 6 } 7 test(); 8 echo $var;
嘿嘿,一运行,居然输入1,TM的unset失效了,为嘛?好吧,我给你的解释是,函数中global $val,但是,函数外面也有一个$val,你要绝对相信,他不是他,
他是是他的一个别名;
在测试1中,$var ++ 结果为2,测试3unset($val) 为啥还是1?因为他操作的是别名的那个他,这里我们把他说成它,别名他=>它。你干掉了它,但是还有一个他;咋样,解释的非常清楚;
ok,既然说到了global,那咋也来说说这个这个那个啥$GLOBALS[],到这里,如果你要说这不是同一个人吗,一个是小名,一个还是小名,hehe;
官方解释:$GLOBALS['var']是外部的全局变量本身,global $var是外部$var的同名引用或者指针。
看测试;
测试4:
1 <?php 2 $var = 1; 3 function test(){ 4 unset($GLOBALS['var']); 5 } 6 test(); 7 echo $var;
结果:啥都没有;为啥和测试3不一样?谁告诉你她(他/它)们一样了。这里只有他,没有它;
所以根据官方与测试案例总结:global $var其实就是$var = &$GLOBALS['var']。