php - 如何将变量绑定(bind)到闭包?

标签 php

我正在研究如何实现一个将任何变量绑定(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/

相关文章:

php - 将 MySQL 结果作为 PHP 数组获取

php - 如何查看上传的文件类型是pdf

php - 使用 php 循环更新 mysql 列

php - 如何为IE8设置边框半径

php - 如果另一个字符串为空,如何在 PHP 中将默认值设置为字符串?

java - 如何将 KNET 支付网关与 php 集成

php - 向查询添加行的语法

php - 加载 AJAX 后解释 javascript 代码

php - 内置 PHP 函数的 Netbeans 代码突出显示

javascript - 如果页面刷新或表格更新,背景颜色将如何保留