谈一谈$GLOBALS和global的差别

$GLOBALS['key'] = value;  
指的的是PHP当前页面的全局变量$key = value的引用,此值可以在PHP流程的任意地方改变,改变的是该全局变量,真正的全局引用。

golbal $key = value;一般用在函数内部,意思是申明变量$key,该变量是由全局变量$key复制而来(继承了全局变量$key),复制的变量只在函数内部有效。一旦在函数中global了某个外部变量后,这个变量就可以在这个函数中使用了


$GLOBALS:

谈一谈$GLOBALS和global的差别_第1张图片

    b();
    function b(){
        a();
        echo $a;//$a未定义
        var_dump($GLOBALS);// 999
        $GLOBALS['key'] = 888;
    }
    function a(){
        $GLOBALS['key'] = 999;
        $a = 4;
    }
    var_dump($GLOBALS);// 888
    echo $a;//$a未定义
    

结果:

谈一谈$GLOBALS和global的差别_第2张图片


谈一谈$GLOBALS和global的差别_第3张图片

golbal:

    $a = 'php';
    function c(){
        global $ac;
        echo $ac,'--';
        global $a;//从这个例子看出global了一个变量就等于传递了一个引用进来,其实就是就是外部变量的同名引用
        echo $a;
    }
    c();

结果:



    function d(){
        $d = 23;//没有global进行修饰,函数外部不能调用否则会报错
    }
    d();
    echo $d;

结果:

谈一谈$GLOBALS和global的差别_第4张图片


    function d(){
        global $d;//这样的声明使得$d变成全局变量,函数外部可以调用了$d
        $d = 23;
    }
    d();
    echo $d;

结果:



    $e = 'PHP';
    function e(){
        global $e;//就是外部变量的同名引用,变量本身的作用范围仍然在函数体内。
        $e = 'JavaScript';//改变这些变量的值,外部的同名变量自然也改变。
    }
    e();
    echo $e;

结果:



    $f1 = 1;
    $f2 = 2;
    function f()
    {
        global $f1,$f2;
        $f1 = $f2;//但一旦用了&,那么变量将不再是同名引用。此时函数内的变量的变化对函数外部的变量并无影响
    }
    f();
    echo $f1;

结果:



    $g1 = 1;
    $g2 = 2;
    function g()
    {
        global $g1,$g2;
        $g1 = &$g2;//但一旦用了&,那么变量将不再是同名引用。此时函数内的变量的变化对函数外部的变量并无影响
    }
    g();
    echo $g1;

结果:



    $h1 = 1;    
    $h2 = 2;    
    function h()    
    {    
        global $h1,$h2;    
        $h1=&$h2;    
        $h1=7;    
    }
    h();    
    echo $h1,'-';//因为内部应用了&,就不是同名引用了,所以尽管$h1被赋值7,但外面的$h1还是原来的1    
    echo $h2;//因为在函数内的$h1与$h2具有相同的引用。因此改变了$h1的值,$h2的值也做了改变。

结果:



参看文章:http://www.thinkphp.cn/code/1018.html

你可能感兴趣的:(PHP)