PHP全局关键字如何在函数内部使用范围? [重复]

问题描述 投票:1回答:1

我写了这段代码,我明白了它的第一个功能。我在看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>";
    ?>
php scope global-variables global local-variables
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.