让我们忽略糟糕的设计并思考一个变量的使用,该变量在函数内部是全局的,但在默认命名空间中不是全局变量:
a();
function a() {
function b() {
global $x;
echo $x;
}
$x=10;
b();
}
变量$x
不会打印到stdout。但是,如果我们在函数global $x
中声明a()
,则将 打印到stdout。有没有办法将$x
定义为a()
内的全局(这样它在b()
函数中可用),但在默认名称空间中不在范围内?
编辑:假设要传递任意数量的变量,因此使用use()
或参数定义它们是不切实际的。
答案 0 :(得分:1)
忽略错误的设计或为什么你不只是将它作为参数传递,你可以使用闭包和匿名函数, if 在定义函数之前定义参数:
function a() {
$x = 10;
$b = function() use($x) {
echo $x; // 10
};
$b();
}
a();
echo $x; // Undefined variable