函数内部global和$GLOBALS[]区别

在网上偶然看到一道题

<?php
    $var1 = 1;
    $var2 = 2;

    function demo()
    {
        global $var1, $var2;
        $var2 = &$var1;
    }

    demo();
    echo $var2;

在我的猜想之中输出应该是1,而不是2。官方给出的说法是:
$GLOBALS['var']是外部的全局变量$var本身。
global $var 是外部$var的同名引用或者指针。
说实话,没看懂。

正解来了php中global与$GLOBAL的区别分析

函数中的$var1,$va2都是局部变量,只不过是加了global关键字后,分别引用指向全局变量$var1,$va2了,当 $var2 = &$var1; 时,局部变量$var2不再指向全局变量$val2,而重新指向全局变量$var1,换句话来说,局部变量$var2的改变,不会再影响到全局变量$val2,而会影响到重新指向的全局变量$val1
不过仍然有点似懂非懂;再来两个例子加深印象

<?php
    $var1 = 1;
    $var2 = 2;

    function demo()
    {
        global $var1, $var2;
        $var2 = &$var1;

        //在函数内部输出var2变量
        echo $var2;
    }

    demo();
    echo $var2;

输出结果是12
$var2 = &$var1; 时,局部变量$var2不再指向全局变量$val2,而重新指向全局变量$var1

<?php
    $var1 = 1;
    $var2 = 2;

    function demo()
    {
        global $var1, $var2;
        $var2 = &$var1;

        //此时这里应该是var1加1了
        $var2++;
    }

    demo();
    //多输出一个var1
    echo $var1;
    echo $var2;

输出结果是22
局部变量$var2的改变,不会再影响到全局变量$val2,而会影响到重新指向的全局变量$val1

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容