访问 PHP 函数中的全局变量

2022-08-30 07:43:50

根据大多数编程语言的作用域规则,我可以访问在函数内部定义的变量,但为什么此代码不起作用?

<?php
    $data = 'My data';

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

    menugen();
?>

输出为 。[]


答案 1

它不起作用,因为您必须声明您将要访问的全局变量:

$data = 'My data';

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

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

menugen();

否则,您可以将其作为 访问。请参见变量作用域$GLOBALS['data']

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


答案 2

您可以执行下列操作之一:

<?php
    $data = 'My data';

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

    menugen();

<?php
    $data = 'My data';

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

    menugen();

话虽如此,过度使用全局变量可能会导致一些糟糕的代码。通常最好传递您需要的东西。例如,不应引用全局数据库对象,而应将句柄传递到数据库并对其执行操作。这称为依赖关系注入。当您实施自动化测试时,它使您的生活变得更加轻松(您应该这样做)。


推荐