zoukankan      html  css  js  c++  java
  • PHP $GLOBALS超全局变量分析

    php中有一个不为很多人所用的超全局变量$GLOBALS。合理使用这个变量能使工作变得更加有效率,本篇文章主要分析一下这个超全局变量的用法以及$GLOBALS和global的区别。

    $GLOBALS定义:引用全局作用域中可用的全部变量(一个包含了全部变量的全局组合数组。变量的名字就是数组的键),与所有其他超全局变量不同,$GLOBALS在PHP代码中任何地方总是可用的,自己可以通过打印$GLOBALS这个变量的结果就知道了。

    PHP生命周期中,定义在函数体外部的所谓全局变量,函数内部是不能直接获得的。如果要在函数体内访问外部定义的全局变量,可以通过global声明或者直接使用$GLOBALS来进行访问,例如:

    <?php
    $var1='www.phpernote.com';
    $var2='www.google.cn';
    test();
    function test(){
        $var1='taobao';
        echo $var1,'<br />';
        global $var1;
        echo $var1,'<br />';
        echo $GLOBALS['var2'];
    }

    结果将打印为:

    taobao
    www.phpernote.com
    www.google.cn

    下面主要说明一下global和$GLOBALS的区别:

    $GLOBALS['var']是外部的全局变量本身,而global $var是外部$var的同名引用或者指针,也就是说global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量,而$GLOBALS[]确确实实调用的是外部的变量,函数内外会始终保持一致。下面通过例子说明一下:

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

    打印结果为1

    $var1=1;
    $var2=2;
    function test(){
        global $var1,$var2;
        $var2=&$var1;
    }  
    test();
    echo $var2;

    打印结果为2。为什么会打印结果为2呢?其实就是因为$var1的引用指向了$var2的引用地址。导致实质的值没有改变。我们再来看一个例子。

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

    因为$var1被删除了,所以什么东西都没有打印。

    $var1=1;
    function test(){
        global $var1;
        unset($var1);
    }  
    test();
    echo $var1;

    打印结果为1。证明删除的只是别名|引用,起本身的值没有受到任何的改变。也就是说global $var其实就是$var=&$GLOBALS['var']。调用外部变量的一个别名而已。

  • 相关阅读:
    模拟赛总结
    2018.04.06学习总结
    2018.04.06学习总结
    Java实现 LeetCode 672 灯泡开关 Ⅱ(数学思路问题)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
  • 原文地址:https://www.cnblogs.com/aten/p/8176366.html
Copyright © 2011-2022 走看看