PHP中 $GLOBALS 与 $global 的迷思。

  • A+
所属分类:php 编程语言

 $GLOBALS[] 中的变量其实就是调用这个变量本身,不管$GLOBALS[]申明在函数的外部还是函数的内部,它们的值总是保持一致。比如

$var1=1;
$var2=2;
function test(){
    //$GLOBALS['var2']=$GLOBALS['var1'];
    $GLOBALS['var2']=&$GLOBALS['var1'];
    //这两条语句的结果都是输出1,因为调用了变量的本身,不管是赋值还是引用,外部变量的值都会改变
}
test();
echo $var2;

有一个迷思是 =& 这个操作的时候搞混了,我理解这个操作的时候其实并不是赋值,而是改变变量的指向或者说是引用,所以下面的就好理解了

$var1=1;
$var2=2;
function test(){
    global $var1,$var2;

    //$var2=1
    //这里输出的只是 1
    
    $var2=&$var1;
    //这里输出的只是 2
    
    //第二条语句看上去$var2是被赋值为$var1了,然而迷思在这里了.这里的$var2其实也是一个内部变量,在没有变更引用之前,它指向外部变量$var2,所以出现第一条语句,赋值后会改变外部变量的情况.而第二条语句却不同了,它的作用是改变了函数内部$var2的指向,函数内部$var2的值是1了,而外部变量的值却不受影响!!!为验证这一点可以在函数内部输出一下$var2就知道了,函数内部的$var2的值为1.
}
test();
echo $var2;

学习果然细节太多,加油!!!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: