将闭包绑定到类方法

时间:2015-04-18 20:08:06

标签: php functional-programming closures

我有功能和python背景,现在我正在尝试PHP。 我想做这样的事情:

    <?php

class Test
{

    function __construct($func)
    {
        $this->build = $func;
    }


}

$test = new Test(function(){echo "neco";});
$test->build();

//my result
//Fatal error: Call to undefined method Test::build() in C:\Install\web\php\test.php on line 15


?>

但是你可以看到我收到了错误。有没有办法用php依赖于参数作为闭包的方法实现类?

2 个答案:

答案 0 :(得分:1)

是的,您可以使用__invoke()执行此操作,只需使用它:

$test->build->__invoke();

输出:

neco

答案 1 :(得分:0)

您可以通过在Test课程中实施魔术功能__call()来实现此目的。

  在调用不可访问的方法时会触发

__call()   对象上下文。

public function __call($name, $arguments) {
    if($name === 'build') {
      $this->build();
    }
}

或使用_call()和动态调度:

public function __call($name, $arguments) {
    call_user_func_array($this->{$name}, $arguments);
}