PHP使用bind()及其范围重新定义闭包

时间:2013-01-05 16:31:54

标签: php closures anonymous-function

  

可能重复:
  Use variables inside an anonymous function, which is defined somewhere else

在PHP> = 5.4中,我们有一个Closure类,其中bindbindTo方法将绑定一个匿名函数添加到一个对象,以便闭包可以访问$this变量,就好像它是在该类中定义的那样。

一个简单的例子:

<?php
$closure = function() {
    echo $this->bla; //prints "bbb"
};

class A
{
    public $bla = 'bbb';
    public function blaat($closure)
    {
        $someVar = 'something';

        $bc = Closure::bind($closure, $this, 'A');
        $bc();
    }
}

$a = new A();
$a->blaat($closure);

这一切都非常好,但是use关键字怎么样?

当我重新绑定类的方法中的闭包时,我可能希望closure能够访问“本地”定义的变量,以及它的父作用域。例如,上例中的$someVar变量。但bind类的Closure方法并不关心use关键字或使用父范围变量的能力。

这种方式感觉有些不完整...任何人都知道这是否得到支持,或者可能在使用closure重新定义bind时已经有办法使用父范围变量或bindTo方法?

0 个答案:

没有答案