考虑这个代码示例:
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
. 那么,有什么解决办法吗?