如何在PHP中立即执行匿名函数?

Ema*_*sev 94 javascript php function

在JavaScript中,您可以定义立即执行的匿名函数:

(function () { /* do something */ })()
Run Code Online (Sandbox Code Playgroud)

你能在PHP中做那样的事情吗?

Gor*_*don 117

对于PHP7:请参阅Yasuo Ohgaki的回答:(function() {echo 'Hi';})();

对于以前的版本:我能想到的唯一方法是立即执行它们

call_user_func(function() { echo 'executed'; });
Run Code Online (Sandbox Code Playgroud)

  • 除非(或直到)[函数调用链接](http://wiki.php.net/rfc/fcallfcall)被引入,这也是我的建议. (12认同)
  • @Gordon:php 5.4还没什么? (2认同)
  • @BennettMcElwee让我们这样说:即使它的性能比define-assign-call替代方案慢一些,这在你的应用程序中造成严重瓶颈的可能性非常低.如有疑问,请在真实世界条件下分析您的应用. (2认同)

Wal*_*ers 25

PHP 7javascript中也是这样做的

$gen = (function() {
    yield 1;
    yield 2;

    return 3;
})();

foreach ($gen as $val) {
    echo $val, PHP_EOL;
}

echo $gen->getReturn(), PHP_EOL;
Run Code Online (Sandbox Code Playgroud)

输出是:

1
2
3
Run Code Online (Sandbox Code Playgroud)


Pac*_*ier 15

当然,你可以使用call_user_func,但还有另一个非常简单的选择:

<?php
// we simply need to write a simple function called run:
function run($f){
    $f();
}

// and then we can use it like this:
run(function(){
    echo "do something";
});

?>
Run Code Online (Sandbox Code Playgroud)

  • 它们不能在代码的其他部分对函数调用`run`,因为在立即执行它的行之后没有函数句柄. (3认同)
  • @DanielHoward"run()"的意思是立即执行传递给它的未命名函数.与`call_user_func()`相同,只传递参数. (3认同)

Yas*_*aki 9

这对于PHP 7.0或更高版本来说是最简单的.

php -r '(function() {echo 'Hi';})();'
Run Code Online (Sandbox Code Playgroud)

它意味着创建闭包,然后通过跟随"()"将其称为函数.由于统一的变量评估顺序,就像JS一样工作.

https://3v4l.org/06EL3

  • 好的答案,但是为什么将其格式化为命令行操作呢? (2认同)

小智 6

(new ReflectionFunction(function() {
 // body function
}))->invoke();
Run Code Online (Sandbox Code Playgroud)

  • 你能提供更多细节吗?也许添加一个解释? (6认同)