美文网首页
php $GLOBALS

php $GLOBALS

作者: 金星show | 来源:发表于2019-01-24 15:07 被阅读0次

    1.global
      Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。
      但是在函数体内定义的global变量,函数体内可以使用,在函数体外定义的global变量不能在函数体内使用,具体看下面示例。

    <?php
    $name = "why";
    function changeName(){
        $name = "what";
    }
    changeName();
    echo "my name is " . $name . "<br/>"; //my name is why
    ?>
    
    <?php
    global $name;
    $name = "why";
    function changeName(){
        $name = "what";
    }
    changeName();
    echo "my name is " . $name . "<br/>"; //my name is why
    ?>
    

    原来,global的正确用法是:"在一个函数中引入外部的一个变量,如果该变量没有通过参数传递进来,那么就通过global引入进来。" 也就是说,当一个函数引用一个外部变量时,可以在函数内通过global来声明该变量,这样该变量就可以在函数中使用了(相当于当作参数引用进来)。

    <?php
    $name = "why";
    function changeName(){
        global $name;
        $name = "what";
    }
    changeName();
    echo "my name is " . $name . "<br/>"; //my name is what
    ?>  //说明global是起传递参数的作用,而并非使变量的作用域为全局
    
    <?php
    $name = "why";
    function changeName(){
        global $name;
        $name = "what";
    }
    function changeName2(){
        $name = "where";
    }
    changeName();
    changeName2();
    echo "my name is " . $name . "<br/>";
    ?>
    //执行结果为:my name is what,如果在changeName2()中添加global $name,运行结果则是:my name is where。
    

    2.$GLOBALS
    $GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。注意$GLOBALS 的写法,比如变量$a1,写法为$GLOBALS['a1']

    示例:先使用global定义
    使用$GLOBALS定义全局变量

    <?php
    $name = "why";
    function changeName(){
        $GLOBALS['name'] = "what";
    }
    changeName();
    echo "my name is " . $name . "<br/>"; //my name is what。
    ?>
    

    例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:

    <?php
    $var1 = 1;
    $var2 = 2;
    function test1(){
        $GLOBALS['var2'] = &$GLOBALS['var1'];
    }
    test1();
    echo $var2 . "<br />"; //1
    
    $var3 = 1;
    $var4 = 2;
    function test2(){
        global $var3,$var4;
        $var4 = &$var3;
    }
    test2();
    echo $var4 . "<br />"; //2
    ?>
    //输出$var2的值为1,$var4的值为2,因为$var3的引用指向了$var4的引用地址。$var4的实际值并没有改变。官方的解释是:$GLOBALS['var']是外部的全局变量本身,global $var是外部$var的同名引用或者指针。意味着$GLOBAL在一个脚本的全部作用域中都可用,在函数或方法中无需执行global $variable; 就可以访问它们。与所有其他超全局变量不同,$GLOBALS在PHP中总是可用的
    
    <?php
    $var1 = 1;
    function test1(){
        unset($GLOBALS['var1']);
    }
    test1();
    echo $var1 . "<br />";
    
    $var2 = 1;
    function test2(){
        global $var2;
        unset($var2);
    }
    test2();
    echo $var2;
    ?>
    //输出结果是$var1不存在,而$var2的值为1。这就证明,$var2只是别名引用,本身的值没有受到任何的改变。也就是说global $var其实就是$var = &$GLOBALS['var'],调用外部变量的一个别名而已!
    

    相关文章

      网友评论

          本文标题:php $GLOBALS

          本文链接:https://www.haomeiwen.com/subject/jdoyjqtx.html