在JavaScript中,您可以定义立即执行的匿名函数:
(function () { /* do something */ })()
你可以在PHP中做类似的事吗?
答案 0 :(得分:113)
对于PHP7:请参阅Yasuo Ohgaki's answer:(function() {echo 'Hi';})();
对于以前的版本:我能想到的唯一方法是立即执行它们
call_user_func(function() { echo 'executed'; });
答案 1 :(得分:24)
在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
答案 2 :(得分: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";
});
?>
答案 3 :(得分:8)
对于PHP 7.0或更高版本,这是最简单的。
php -r '(function() {echo 'Hi';})();'
这意味着创建闭包,然后通过跟随“()”将其称为函数。由于统一的变量评估顺序,它就像JS一样工作。
答案 4 :(得分:6)
(new ReflectionFunction(function() {
// body function
}))->invoke();
答案 5 :(得分:1)
注意,accepted answer没问题,但它比宣布一个函数并用两行调用它需要1.41倍(比慢41%)。
[我知道它并不是一个真正的新答案,但我认为将它添加到访客的某个地方是有价值的。]
详细说明:
<?php
# Tags: benchmark, call_user_func, anonymous function
require_once("Benchmark.php");
bench(array(
'test1_anonfunc_call' => function(){
$f = function(){
$x = 123;
};
$f();
},
'test2_anonfunc_call_user_func' => function(){
call_user_func(
function(){
$x = 123;
}
);
}
), 10000);
?>
结果:
$ php test8.php
test1_anonfunc_call took 0.0081379413604736s (1228812.0001172/s)
test2_anonfunc_call_user_func took 0.011472940444946s (871616.13432805/s)
答案 6 :(得分:0)
我用这种方式试了一下,但是通过使用任何允许你首先定义函数的运算符(或函数),它比最顶层的答案更冗长:
$value = $hack == ($hack = function(){
// just a hack way of executing an anonymous function
return array(0, 1, 2, 3);
}) ? $hack() : $hack();
答案 7 :(得分:0)
这不是直接的答案,而是一种解决方法。使用PHP> =7。使用命名方法定义匿名类,并构造该类并立即调用该方法。
public function survey($survey_id)
{
$this->load->view('products/survey', $survey_id);
}
答案 8 :(得分:-2)
不立即执行,但接近;)
<?php
$var = (function(){ echo 'do something'; });
$var();
?>