我正在寻找如何实现一个函数,它将任何变量绑定到函数。
使用假设函数\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
UPDATE :似乎没有办法轻松做到这一点。一些生成代码& eval magic?
答案 0 :(得分:4)
也许我不明白,但我试着回答。
正如我从文档中看到的那样,bind方法就在这里,为闭包设置一个对象上下文。
所以如果你有对象foo:
class foo {};
$foo = new foo();
您可以通过关闭中的foo
访问$this
。
也许你想要这样的东西:
$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();