PHP全局关键字如何在使用范围的函数内部工作?

时间:2019-04-05 19:56:11

标签: php scope global-variables global local-variables

我已经编写了这段代码,我明白了它的第一个功能。我在看w3schools的屏幕截图时正在练习。

screenshot from w3schools.com

我只要求对第二和第三个功能进行一些清晰的解释。

我已经根据代码及其结果中的差异编辑了代码。

    <?php 
    $x = 5;
    $y = 10;
    function myTest1(){
        global $x, $y;
        $y = $x + $y;
        echo "test1 value using GLOBAL keyword INSIDE function is : $y <br>";
    }
    myTest1();
    echo "test1 value using GLOBAL keyword OUTSIDE function is : $y <br><br>";
    ?>

    <?php 
    $x = 5;
    $y = 10;
    function myTest2(){
        $GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
        echo "test2 value using NO GLOBAL with GLOBALS[variable/index] keyword INSIDE function is nothing : $y <br>";
    }
    myTest2();
    echo "test2 value using NO GLOBAL with GLOBALS[variable/index] keyword INSIDE function is : $y <br><br>";
    ?>

    <?php 
    $x = 5;
    $y = 10;
    function myTest3(){
        global $x, $y;
        $GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
        echo "test3 value using GLOBAL with GLOBALS[variable/index] keyword INSIDE function is : $y <br>";
    }
    myTest3();
    echo "test3 value using NO GLOBAL with GLOBALS[variable/index] keyword INSIDE function is : $y <br>";
    ?>

1 个答案:

答案 0 :(得分:3)

myTest1()myTest2()的工作原理相同,因为声明global $x, $y;表示函数内的变量$x$y引用了全局变量,与$GLOBALS['x']$GLOBALS['y']相同。

但是myTest2()没有global声明。当它分配给$GLOBALS['y']时,这将更新全局变量$y,但不会更新具有相同名称的局部变量。然后,它回显$y,而不是$GLOBALS['y']。由于尚未分配局部变量$y,因此不会显示任何内容。

如果启用error_reporting(E_ALL);,则会收到来自myTest2()的警告:

  

注意:未定义的变量:第20行上filename.php中的y