PHP:从类/方法中访问变量,它们都在同一个闭包中定义

时间:2018-10-25 11:52:59

标签: php scope closures php-closures

以下代码按预期工作:

$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(); }); 关键字无关,与这里的问题无关)。

1 个答案:

答案 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();
});