1

考虑这个代码示例:

class foo { $bar = 'Hello'; }

$dump = function()
{
    var_dump($this);
};

$foo = new foo();
$bound = $dump->bindTo($foo);
$bound(); // Calls $dump which is bound to $foo instance of foo class

这工作正常。问题是 - 我可以为自由功能做同样的事情,但不能为闭包做吗?像这样:

class foo { $bar = 'Hello'; }

function dump()
{
    var_dump($this);
}

$foo = new foo();
$bound = /* Some sort of sorcery */
$bound(); // Calls free-function dump which is bound to $foo instance of foo class

我尝试了几种方法,但仍然没有成功。dump不是闭包,所以我不能使用dump->bindTo. 此外,我无法将函数名称传递给Closure::bind,因为dump'dump'- 两者都不起作用。没有的函数名()只是一个文字字符串,但不是可调用的。事件如果我使用变量函数,就像$functor = 'dump'; $functor();它仍然是一个普通的字符串,我不能把它转换成Closure. 那么,有什么解决办法吗?

4

1 回答 1

1

我相信这在本地是不可能的。但是,我发现Matthew Lanigan 制作的这个函数callable可以将 any转换为闭包,因此您可以将其绑定到 anyhting。

于 2013-09-25T02:00:09.857 回答