如何将变量绑定到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