将闭包绑定到 class 方法

Bind closure to class method

我有功能和 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 中依赖于参数作为闭包的方法来实现 class?

是的,你可以用 __invoke() 做到这一点,就像这样使用它:

$test->build->__invoke();

输出:

neco

您可以通过在 Test class 中实现魔术功能 __call() 来实现这一点。

__call() is triggered when invoking inaccessible methods in an object context.

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

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

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