zoukankan      html  css  js  c++  java
  • 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值并未改变。

    如此,便明了了。

  • 相关阅读:
    SharePoint Framework (SPFx) 开发入门教程
    SharePoint 2013 Designer 入门教程
    SharePoint 2013 开发教程
    SharePoint 2013 入门教程
    SharePoint Online 部署SPFx Web部件
    SharePoint Online SPFx Web部件绑定数据
    SharePoint Online 创建SPFx客户端Web部件
    SharePoint Online 配置框架(SPFx)开发环境
    SharePoint Online 创建应用程序目录
    SharePoint Online 启用 IRM
  • 原文地址:https://www.cnblogs.com/jiangtian/p/8640111.html
Copyright © 2011-2022 走看看