访问 PHP 函数中的全局变量

新手上路,请多包涵

根据大多数编程语言的范围规则,我可以访问在它们内部的函数之外定义的变量,但为什么这段代码不起作用?

 <?php
    $data = 'My data';

    function menugen() {
        echo "[" . $data . "]";
    }

    menugen();
?>

输出是 []

原文由 Amin Gholibeigian 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 643
2 个回答

要解决所提出的问题,它不起作用,因为您需要在函数本身中声明要访问的全局变量:

 $data = 'My data';

function menugen() {
    global $data; // <-- Add this line

    echo "[" . $data . "]";
}

menugen();

否则,您可以以 $GLOBALS['data'] 的形式访问它,请参阅 _变量范围_。

即使有点离题,我建议您 完全避免使用全局变量, 而更喜欢将数据作为参数传递。

在这种情况下,上面的代码如下所示:

 $data = 'My data';

function menugen($data) { // <-- Declare the parameter
    echo "[" . $data . "]";
}

menugen($data); // <-- And pass it at call time

原文由 Matteo Tassinari 发布,翻译遵循 CC BY-SA 4.0 许可协议

上面回答了访问函数内部全局变量的正确方法!

但是,如果您出于某种原因不想使用 global 关键字,也不想使用 $GLOBALS 变量( _例如,您有多个功能并且您“厌倦了”编写 global $variable; 每次_),这里有一个解决方法:

 $variable = 42;  // the global variable you want to access

// write a function which returns it
function getvar(){
    global $variable;
    return $variable;
}

//--------------

function func1()
{
    // use that getter function to get the global variable
    echo getvar();  // 42
}

function func2()
{
    echo getvar();  // 42
}
...

原文由 hlorand 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题