0

以下代码按预期工作:

$b = 42;
var_dump("b: " . $b);

class A
{
    function foo()
    {
        global $b;
        var_dump("b: " . $b);
    }
}

$instance = new A();
$instance->foo();

由于关键字,该foo方法能够访问。$bglobal

但是,如果我将所有这些都移动到一个闭包中,$b它就不再是一个“全局”变量,并且它不起作用(有或没有该global语句):

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

如何编辑此代码以便该方法可以访问“闭包顶级”(非全局)变量?

我无法在 SO 上找到相同的问题,如果有重复,请随时关闭此问题(与use关键字无关的内容与我的问题无关)。

4

1 回答 1

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();
});
于 2018-10-25T12:02:38.437 回答