以下代码按预期工作:
$b = 42;
var_dump("b: " . $b);
class A
{
function foo()
{
global $b;
var_dump("b: " . $b);
}
}
$instance = new A();
$instance->foo();
借助foo
关键字,$b
方法能够访问global
。
但是,如果我将所有这些都移到 closures 中,则$b
不再是“全局”变量,并且不起作用(有或没有{{1 }}语句):
global
如何编辑此代码,以便该方法可以访问“ closure top-level”(不是全局)变量?
我无法在SO上找到相同的问题,如果有重复的问题,可以随时将其关闭(与call_user_func(function () {
$b = 42;
var_dump("b: " . $b);
class A
{
function foo()
{
global $b;
var_dump("b: " . $b);
}
}
$instance = new A();
$instance->foo();
});
关键字无关,与这里的问题无关)。
答案 0 :(得分:1)
使用var $ b的“全球化”,然后再将值存储到其中,对我来说很好用。此处的代码段:
call_user_func(function () {
global $b;
$b = 42;
var_dump("b: " . $b);
$instance = new class
{
function foo()
{
global $b;
var_dump("b: " . $b);
}
};
$instance->foo();
});