考虑以下代码示例:
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
。那么,有什么解决方案吗?
答案 0 :(得分:1)
我认为这本身不可能。但是,我发现Matthew Lanigan制作的this function会将任何callable
转换为闭包,因此您可以将其绑定到任何时候。