调用PHP自由函数作为成员函数

调用PHP自由函数作为成员函数,php,closures,Php,Closures,考虑以下代码示例: 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'; }

$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'$函子()
它仍然是一个普通字符串,我无法将其转换为
闭包
。那么,有什么解决办法吗?

我认为这在本质上是不可能的。然而,我发现Matthew Lanigan的made将任何
可调用的
转换为闭包,因此您可以将其绑定到任何东西。

我认为这在本质上是不可能的。但是,我发现Matthew Lanigan制作的,它将任何
可调用的
转换为闭包,因此您可以将其绑定到任何东西。

我不明白。为什么要在正常函数中编写
$this
?你能告诉我一点背景知识吗?同样的原因,你为什么要使用Closure和Closure::bindTo-来编写一个可以作为某个对象的成员函数调用的函数。我不明白。为什么要在正常函数中编写
$this
?你能告诉我一点背景吗?同样的原因,你为什么要使用Closure和Closure::bindTo来编写一个函数,这个函数可以作为某个对象的成员函数调用。哇,这看起来很复杂。看起来你是对的,没有简单的解决办法。哇,看起来很复杂。看来你是对的,没有简单的解决办法。