全局内部函数的变量范围


Variable scope for global inside functions

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

a();
function a() {
    function b() {
        global $x;
        echo $x;
    }
    $x=10;
    b();
}

变量$x未打印到stdout。但是,如果我们在函数a()中声明global $x,则它打印到stdout。是否有任何方法可以将$x定义为a()内部的全局(以便它在b()函数中可用),但不在默认命名空间的范围内?

编辑:假设要传递任意数量的变量,例如用use()或将其定义为参数是不可行的。

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

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