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'],调用外部变量的别名而已

  • 相关阅读:
    JS的运行机制
    Vue路由
    javascript的逼格
    Vue开发中遇到的问题及解决方案
    模块模式
    2019年终总结
    http知识总结
    小议函数的节流和防抖
    nodejs初探一二
    Object是个什么鬼
  • 原文地址:https://www.cnblogs.com/skl-bobo/p/10675164.html
Copyright © 2011-2022 走看看