【问题标题】:Calling a function inline in PHP在 PHP 中调用内联函数
【发布时间】:2014-03-04 14:17:52
【问题描述】:

当方法返回一个函数时,可以这样调用:

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)

...

【问题讨论】:

  • 你能解释一下你的实际目标是什么,因为现在这似乎无缘无故地增加了额外的复杂性。你这样做的目的是什么?
  • 返回 $f() 而不是返回 $f
  • @Nouphal.M: Return f() 将评估 f 并返回结果。这将“内联”被调用方的函数,并在示例中返回一个字符串。
  • @FDL:我希望将 FUNctions 作为返回值并对其进行评估:-)
  • 我们已经在 90 年代的 perl 中做到了这一点$f->foo()->()

标签: php functional-programming inline


【解决方案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());

【讨论】:

    【解决方案2】:

    看看这个并确定你的 PHP 版本: Anonymous functions

    【讨论】:

      猜你喜欢
      • 2020-06-18
      • 2010-11-06
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      相关资源
      最近更新 更多