我如何立即在PHP中执行匿名函数?
在JavaScript中,您可以定义立即执行的匿名函数:
(function () { /* do something */ })()
你可以在PHP中做这样的事吗?
对于PHP7:见大冢康夫的回答 : (function() {echo 'Hi';})();
echo'Hi (function() {echo 'Hi';})();
对于以前的版本:立即执行它们的唯一方法是我能想到的是
call_user_func(function() { echo 'executed'; });
在PHP 7
是做同样的JavaScript
$gen = (function() { yield 1; yield 2; return 3; })(); foreach ($gen as $val) { echo $val, PHP_EOL; } echo $gen->getReturn(), PHP_EOL;
输出是:
1 2 3
那么当然你可以使用call_user_func
,但还有一个非常简单的select:
<?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"; }); ?>
这对于PHP 7.0或更高版本来说是最简单的。
php -r '(function() {echo 'Hi';})();'
这意味着创build闭包,然后通过“()”作为函数调用它。 像JS一样工作,感谢统一的variables评估顺序。
(new ReflectionFunction(function() { // body function }))->invoke();
我用这种方法试了一下,但是比使用任何允许你首先定义函数的操作符(或者函数)的答案要复杂得多。
$value = $hack == ($hack = function(){ // just a hack way of executing an anonymous function return array(0, 1, 2, 3); }) ? $hack() : $hack();
不立即执行,但接近;)
<?php $var = (function(){ echo 'do something'; }); $var(); ?>