zoukankan      html  css  js  c++  java
  • 【PHP】- 全局变量global和$GLOBALS的区别

    1.global

      global关键字的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。

      但是在函数体内定义的global变量,函数体内可以使用,在函数体外定义的global变量不能在函数体内使用,具体看下面示例。

          (1)在函数体内定义global变量,函数体内可以使用。

    <?PHP 
    $a=123; 
    function aa() 
    { 
    global $a; //把$a定义为global变量。 
    echo $a; //调用函数体外的变量
    } 
    aa(); //输出结果为123,说明函数体内可以使用函数体外的变量;
    ?>

          (2)在函数体外定义global变量,函数体内不可以使用。

    <?PHP 
    $a=123; 
    global $a; //在函数体外把$a定义为global变量。 
    function aa() 
    {  
      echo $a; 
    } 
    aa();//会报错,不能输出变量a。
    ?>

    2.$GLOBALS

    在 $GLOBALS。$GLOBALS 之所以在全局范围内存在,是因为 GLOBALSGLOBALS 的写法,比如变量a1为:GLOBALS['a1']。

    示例:先使用global定义

    <?PHP 
    $a1 = 1; 
    $a2 = 2; 
    function Sum() 
    { 
      global a1, a2;
    a2 = a1 + a2; //定义变a1和a2; } Sum(); echo a2; //输出结果为3 ?>

    使用$GLOBALS定义全局变量

    <?PHP 
    $a1 = 1; 
    $a2 = 2;
    function Sum() 
    { 
      $GLOBALS['a1'] = $GLOBALS['a1'] + $GLOBALS['a2']; //定义变量时每个都要定义
    }
    Sum(); 
    echo a2; //输出结果为2
    ?>

    例1:

    function test() 
    { 
        global $a;//定义全局变量a 
        unset($a); //删除变量a
        //print $a;//会报错,因为unset已经把$a删除了。 
    } 
    $a = 2; //定义一个变量a
    test(); //调用test()方法
    print $a; //输出a,输出的其实是$a = 2,所以结果为2.

    例2:

    function test_global() 
    { 
        global $var1, $var2; 
        $var2 =&$var1; 
    } 
    function test_globals() { $GLOBALS['var3'] =&$GLOBALS['var1']; }
    $var1 = 5; $var2 = $var3 = 0; test_global(); print $var2; //输出结果为0 test_globals(); print $var3; //输结果为5

    很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然
    根据官方的解释是
    1.$GLOBALS[‘var’]是外部的全局变量本身
    2.global $var是外部$var的同名引用或者指针。

    举个栗子:

    <?php
    $var1 = 1;
    $var2 = 2;
    function test()
    {
    $GLOBALS[‘var2′] = &$GLOBALS[‘var1′]; } test(); echo $var2; //正常打印结果为1 ?>
    <?php
    $var1 = 1;
    $var2 = 2;
    function test()
    {
    global $var1,$var2; $var2 = &$var1; } test(); echo $var2; // 意外的打印出2 ?>

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

    <?php
    $var1 = 1;
    function test()
    {
    unset($GLOBALS[‘var1′]); } test(); echo $var1; ?>

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

    <?php
    $var1 = 1;
    function test()
    {
    global $var1; unset($var1); } test(); echo $var1; ?>

    意外的打印了1。证明删除的只是别名|引用,起本身的值没有受到任何的改变。  

    明白了吧?
    也就是说global $var其实就是$var = &$GLOBALS[‘var’]。调用外部变量的一个别名而已。

  • 相关阅读:
    Oracle SQL语句收集
    SqlParameter In 查询
    SQL 性能优化
    Entity Framework
    【XLL API 函数】 xlfSetName
    【XLL API 函数】xlfUnregister (Form 2)
    【XLL API 函数】xlfUnregister (Form 1)
    【Excel 4.0 函数】REGISTER 的两种形式以及VBA等效语句
    【Excel 4.0 函数】REGISTER
    【Bochs 官方手册翻译】 第一章 Bochs介绍
  • 原文地址:https://www.cnblogs.com/wangwust/p/8535575.html
Copyright © 2011-2022 走看看