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

时间:2013-09-25 00:48:27

标签: 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'; }

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。那么,有什么解决方案吗?

1 个答案:

答案 0 :(得分:1)

我认为这本身不可能。但是,我发现Matthew Lanigan制作的this function会将任何callable转换为闭包,因此您可以将其绑定到任何时候。