0

PHP是否支持usea 范围内的局部变量,Closure即使这个变量是通过创建的Closure::fromCallable()

通常我会做

$value = 'foobar';
$callback = function() use (&$value) {
    $value .= ' string';
    return $value;
};
var_export($callback());  // prints 'foobar string'

但是当有更复杂的代码时,我如何获得相同的结果呢?

class A
{
    public function __construct()
    {
        $value = 'foobar';
        $callback = Closure::fromCallable([ $this, 'myCallable' ]);

        var_export( $callback() );
    }

    protected function myCallable()
    {
        $value .= ' string';
        return $value;
    }
}

我知道在这种情况下我可以将值作为可调用参数传递,但我之所以写作是因为对 PHP 的工作原理感到好奇。

另外,是的,在内部使用 $valuemyCallable而不在任何地方声明它是非常荒谬的。但是,它更多的是关于好奇心而不是正确性

我已经尝试过$callback = Closure::fromCallable([ $this, 'myCallable' ]) use ($value);了,但它因语法错误而失败。

该方法不应该fromCallable支持在闭包的范围内传递我们想要的变量,替换use语句的功能吗?

我在functions.anonymousclosure.fromcallable中找不到任何见解。

4

1 回答 1

0

如果你能用这种方式解决它怎么办:

class A
{
    private $value;

    public function __construct()
    {
        $this->value = 'foobar';
        $callback = Closure::fromCallable([ $this, 'myCallable'  ]);

        var_export( $callback() );
    }

    protected function myCallable()
    {
        $this->value .= ' string'; 
        return $this->value;
    }
}
于 2019-07-23T16:00:12.377 回答