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

    转载自 https://www.freebuf.com/column/230907.html

    PHP中有一个鲜为人知的超全局变量$GLOBALS。

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

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

    比如:

    <?php
    $var1='www.tidesec.com';
    $var2='www.tidesec.net';
    test();
    function test(){
    $var1='tide';
    echo $var1,'<br />';
    global $var1;
    echo $var1,'<br />';
    echo $GLOBALS['var2'];
    }
    

    输出结果为:

    tide
    www.tidesec.com
    www.tidesec.net
    

    其中global和$GLOBALS的区别:

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

    举个例子:

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

    结果为:

    tide
    

    $var1=tide;
    $var2=tidesec;
    function test(){
    global $var1,$var2
    $var2=&$var1;
    }  
    test();
    echo $var2;
    
    

    结果为:

    tidesec
    

    结果之所以为tidesec,原因为$var1的引用指向了$var2的引用地址。导致实质的值没有发生变化。


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

    结果为:

    tide
    

    这就说明,删除的只是别名或者说是引用,其本身作用的值没有受到任何的影响。也就是说,global $var其实是$var = &$GLOBALS['var'],调用外部变量的一个别名而已。

  • 相关阅读:
    O021、创建 Image
    O020、理解 Glance
    O019、通过例子学习 Keystone
    O018、理解 Keystone 核心概念
    O017、部署DevStack
    O016、搭建实验环境
    O015、OpenStack 架构
    O014、云计算与OpenStack
    O013、动手实践Linux VLAN
    O012、Linux如何实现VLAN
  • 原文地址:https://www.cnblogs.com/NPFS/p/12721175.html
Copyright © 2011-2022 走看看