php中global和$GLOBALS最浅显易懂的解释

  官方文档:数组

global指对变量的引用或者叫指针,$GLOBALS则是变量自己;ide

$var1 = 1;
        $var2 = 2;
        function fun(){
          $GLOBALS['var2'] = &$GLOBALS['var1'];
          echo $GLOBALS['var2'];
          $GLOBALS['var2'] = 3;
        }

        fun();
        echo $var2;
        echo $var1;
        echo "\r\n";

        function fun1(){
          global $var1, $var2;
          $var2 = &$var1;
          echo $var2;
          echo "\r\n";
          $var2 = 3;
        }

        fun1();
        echo $var2;
        echo $var1;
View Code

以上代码中函数外部变量能够视为var1指向一个box,box中就是变量值,此处是1,var2指向另一个box,也是变量值,此处是2;函数

对于$GLOBALS数组中的var1及var2实际就是这两个变量自己,也就是否是另外两块分别指向两个box的变量空间;spa

因此在函数内部改变var2的值,也就是第二个box的值被复制成了第一个box的值,第一次echo就是复制的第一个box的值,而后在函数内部从新赋值为3,外部的var2天然也就改变,由于它们同为一个变量;3d

接着若是函数内部var2被赋值为&var1,也就是将var2指向了第二个box,此时var1,var2都指向了box1,天然var2改变了值,也就是第一个box中的值被改变了。指针

 

而对于global则至关于内部从新分配了两个同名变量空间,可是呢,var1指向外部那个var1的box,var2指向外部那个var2的box,此时box成了4个,给var2赋值为var1,实际就是将两个var1指向的那个box的值复制给两个var2指向的box,此时天然在var2被从新赋值后,外部的var2值也变了,可是var1的值并无被改变;但若改成给var1赋值&var2,也就意味着内部的var2已经指向了内外部var1指向的第一个box,惟独外部的var2仍是指向第二个box,此时改变内部var2的值,只会影响内外部var1和内部已经改变指向的var2那个box,即第一个box的值,可是第二个box的值,也就是外部var2指向的box值并未改变。code

 

如此,便明了了。blog

相关文章
相关标签/搜索