全局内部函数的可变范围

时间:2013-07-15 13:51:23

标签: php oop global-variables scope

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

a();

function a() {

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

    $x=10;
    b();
}

变量$x不会打印到stdout。但是,如果我们在函数global $x中声明a(),则将 打印到stdout。有没有办法将$x定义为a()内的全局(这样它在b()函数中可用),但在默认名称空间中不在范围内?

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

1 个答案:

答案 0 :(得分:1)

忽略错误的设计或为什么你不只是将它作为参数传递,你可以使用闭包和匿名函数, if 在定义函数之前定义参数:

function a() {
    $x = 10;

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

    $b();
}

a();
echo $x; // Undefined variable