如何将变量绑定到Closure?

我正在寻找如何实现一个函数,它绑定了任何变量来运行。

使用假想函数Closure::bindVariable($closure, $name, $value) ,实现可能是这样的:

function bindAnything($closure, $anyVariables)
{
     foreach ($variables as $variable => $value) {
         Closure::bindVariable($closure, $variable, $value);
     }
     return $variable;
}

不幸的是,没有Closure::bindVaraiable 。 有Closure::bind ,但只有$this被这个函数绑定。

http://php.net/manual/en/class.closure.php


更新:似乎没有办法如何轻松地做到这一点。 怎么样生成代码和eval魔法?


也许我不明白,但我试着回答。

正如我从文档中看到的,bind方法在这里,为闭包设置一个对象上下文。

所以如果你有对象foo:

class foo {};
$foo = new foo();

您可以通过$this在闭包中访问foo

也许你想有这样的事情:

$foo = new stdClass();
$foo->bar = "42";

$closure = function() {
    return $this->bar;
};

$closure.bindTo($foo);
echo $closure();

也许你想这样做:

function bindAnything($closure, $anyVariables)
{
    $obj = (object)$anyVariables;
    $closure.bindTo($obj);
    return $closure;
}

$closure = function() {
    return $this->foo;
};

var $arr = ["foo" => "bar"];

$newClosure = bindAnything($closure, $arr);
echo $newClosure();
链接地址: http://www.djcxy.com/p/87869.html

上一篇: How to bind variables to Closure?

下一篇: pages create by repeat