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