PHP语言中global和$GLOBALS[]的区别

今天在lamp 2群中有人问面试题。。就是关于 global的。。还有个 & 符号。


很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然。

根据官方的解释是

1.$GLOBALS['var']是外部的全局变量本身

2.global $var是外部$var的同名引用或者指针。

举例说明一下:

[c-sharp]  view plain copy
  1. <?php  
  2. $var1 = 1;  
  3. $var2 = 2;  
  4. function test(){  
  5.     $GLOBALS['var2'] = &$GLOBALS['var1'];  
  6. }  
  7. test();  
  8. echo $var2;  
  9. ?>  

正常打印结果为1

[c-sharp]  view plain copy
  1. <?php  
  2. $var1 = 1;  
  3. $var2 = 2;  
  4. function test(){  
  5.     global $var1,$var2;  
  6.     $var2 = &$var1;  
  7. }  
  8. test();  
  9. echo $var2;  
  10. ?>  
/

意外打印结果为2

<?php  
// 例子1  
function test_global() {  
  global $var1, $var2;  
  $var2 =& $var1;  
}  
function test_globals() {  
  $GLOBALS['var3'] =& $GLOBALS['var1'];  
}  
$var1 = 5;  
$var2 = $var3 = 0;  
test_global();  
print $var2 ."\n";  
echo $GLOBALS['var3'];
test_globals();  
print $var3 ."\n";  
?>

也就是说上面代码中的 $var1 $GLOBALS['var1'] 是指的同一变量,而不是2个不同的变量!

global 申明在函数中的变量其实还是个局部变量,在函数里面其实还是个变量的 别名变量。。

记得一句话。函数中的变量都是局部变量。


所以我们得出一个结论,在函数中global和$GLOBALS[]的区别在于:

global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量,一但改变了别名变量的指向地址,就会发生一些意料不到情况,

$GLOBALS[]确确实实调用是外部的变量,函数内外会始终保持一致!




你可能感兴趣的:(PHP,function,面试,语言)