0

让我们忽略糟糕的设计并考虑在函数内部使用全局变量,但在默认命名空间中不是全局变量:

a();

function a() {

    function b() {
        global $x;
        echo $x;
    }

    $x=10;
    b();
}

该变量$x不会打印到标准输出。但是,如果我们声明global $x内部函数a(),那么它打印到标准输出。有什么方法可以$x在内部定义为全局a()(以便它在b()函数中可用)但不在默认命名空间的范围内?

编辑:假设要传递任意数量的变量,因此使用use()或作为参数定义它们是不切实际的。

4

1 回答 1

1

忽略糟糕的设计或为什么不只是将其作为参数传递,如果在定义函数之前定义参数,则可以使用闭包和匿名函数:

function a() {
    $x = 10;

    $b = function() use($x) {
        echo $x; // 10
    };

    $b();
}

a();
echo $x; // Undefined variable
于 2013-07-15T14:00:32.193 回答