当一个方法返回一个函数时,可以像这样调用它:
class AClass {
public function getFnc() {
$f = function() {
echo "hello from a function";
};
return $f;
}
}
在主叫方我们可以这样做:
$c = new AClass();
$f = $c->getFnc();
$f();
输出是预期的
hello from a function
。
内联编写调用无法编译:
$c->getFnc()();
如何通过一些强制转换将其内联写入(ish)?我正在从调用者的角度寻找一种优雅的方式。
在数学中,事物是就地评估的:
(3 + 2)(5 + 1)
(5)(6)
30
而不是引入不必要的变量f1:
f1 = (3 + 2)
f1(5 + 1)
...
您的函数可以被视为回调函数,因此
call_user_func()
将调用返回的函数。您可以像这样调用该函数...
http://be2.php.net/function.call-user-func
class AClass {
public function getFnc() {
$f = function() {
echo "hello from a function";
};
return $f;
}
}
$c = new AClass();
call_user_func($c->getFnc());
看一下这个并确定您的 PHP 版本: 匿名函数
php 4.4 版本失败
php 版本 5.6 执行
$f()
但失败于 $f()()
高于 5.6 的 php 版本可以同时执行这两种操作,所以今天,可以说这些代码片段工作正常..