zoukankan      html  css  js  c++  java
  • PHP中$GLOBALS和global的区别

    很多人都认为$GLOBALS['var']和global $var只是写法上不同,其实并不是这样

    根据官方的解释是  $GLOBALS['var']是外部全局变量$var的本身, 而global $var 是外部$var的同名引用

    下面我们来举个例子:

    <?php

    $var1 = 1;

    $var2 = 2;

    function test()
    {
    $GLOBALS['var1'] = &$GLOBALS['var2'];
    }

    test();

    echo $var1;

    正常输出2

    <?php

    $var1 = 1;

    $var2 = 2;

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

    echo $var2;

    $var2 = '3';
    }

    test(); // 输出1

    echo $var1; // 输出3

    echo $var2; // 输出2

    test() 函数中的$var1和$var2都是局部变量,只不过加了global后。分别引用指向了全局变量$var1和$var2,当执行了$var2 = &$var1;

    局部变量$var2不在引用指向全局变量$var2,而是指向全局变量$var1,换句话来说,局部变量$var2改变不会影响到全局变量$var2,

    而会影响到全局变量$var1.

    下面再举个例子来说明官方解释:

    <?php

    $var1 = 1;

    function test()
    {
      unset($GLOBALS['var1']);
    }

    test();

    echo $var1;

    会报出一个 PHP Notice:  Undefined variable: var1 in /usercode/file.php  的错误,说明全局变量已经被删除了

    $var1 = 1;

    function test()
    {
      global $var1;
      unset($var1);
    }

    test();

    echo $var1;

    输出结果为 1 ,证明删除的只是别名,对全局变量$var1的引用,对全局变量$var1并没有影响

    也就是说 global $var1 就是 $var1 = &$GLOBALS['var1'],调用外部变量的别名而已

  • 相关阅读:
    散列函数的构造方法
    散列表(哈希表)查找
    散列表,哈希表,散列表查找法
    多路查找树之2-3-4树和B树
    多路查找树之2-3树的删除原理
    多路查找树之2-3树的插入原理
    多路查找树之2-3树
    字典:当索引不好用时2
    字典:当索引不好用时
    平衡二叉树的实现原理(代码实现)- 数据结构和算法78
  • 原文地址:https://www.cnblogs.com/skl-bobo/p/10675164.html
Copyright © 2011-2022 走看看