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


      官方文档:

    global指对变量的引用或者叫指针,$GLOBALS则是变量本身;

    $var1 = 1;
            $var2 = 2;
            function fun(){
              $GLOBALS['var2'] = &$GLOBALS['var1'];
              echo $GLOBALS['var2'];
              $GLOBALS['var2'] = 3;
            }
    
            fun();
            echo $var2;
            echo $var1;
            echo "
    ";
    
            function fun1(){
              global $var1, $var2;
              $var2 = &$var1;
              echo $var2;
              echo "
    ";
              $var2 = 3;
            }
    
            fun1();
            echo $var2;
            echo $var1;
    View Code

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

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

    所以在函数内部改变var2的值,也就是第二个box的值被复制成了第一个box的值,第一次echo就是复制的第一个box的值,然后在函数内部重新赋值为3,外部的var2自然也就改变,因为它们同为一个变量;

    接着如果函数内部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值并未改变。

    如此,便明了了。

  • 相关阅读:
    django中ckeditor富文本编辑器使用
    xadmin安装
    RabbitMQ应用示例
    windows下安装RabbitMQ
    第四章 面向对象
    第三章 模块
    git简单使用
    python中的装饰器
    Python 使用 argparse 开发命令行工具/获取命令行参数/子命令实现
    自动化运维工具 Ansible 安装、配置及使用
  • 原文地址:https://www.cnblogs.com/jiangtian/p/8640111.html
Copyright © 2020-2023  润新知