我正在研究如何实现一个将任何变量绑定(bind)到函数的函数。
使用假设的函数\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
被这个函数绑定(bind)。
http://php.net/manual/en/class.closure.php
更新:似乎没有办法轻松做到这一点。一些生成代码和评估魔法怎么样?
最佳答案
也许我不明白,但我尽力回答。
正如我从文档中看到的,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();
关于php - 如何将变量绑定(bind)到闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32530492/