将闭包绑定到 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);
}
我有功能和 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);
}