回答:
PHP7の場合:大垣康雄の回答を参照してください。(function() {echo 'Hi';})();
以前のバージョンの場合:私が考えることができるそれらをすぐに実行する唯一の方法は
call_user_func(function() { echo 'executed'; });
call_user_func
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
、別のかなり単純な代替方法があります。
<?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
コードの他の部分で関数を呼び出すことはできません。これは、関数をすぐに実行する行の後に関数へのハンドルが存在しないためです。
run()
、渡された名前のない関数をすぐに実行することです。と同様にcall_user_func()
、パラメータは渡されません。
$f();
使用するエンジンがcall_user_func
関数の引数が1つしかない特殊な場合に最適化されていない場合は高速になる可能性があります。これは、call_user_func
複数のパラメーターの受け渡しをサポートし、その最初の引数が引数としての文字列または関数のいずれかをサポートするためです。とは言っても、コードがpyramindの下部のどこかに配置されていない限り、call_user_func
読みやすい場合は使用しません。run
これは、PHP 7.0以降で最も簡単です。
php -r '(function() {echo 'Hi';})();'
これはクロージャを作成し、「()」に従って関数として呼び出すことを意味します。変数の評価順序が統一されているため、JSと同じように機能します。
(new ReflectionFunction(function() {
// body function
}))->invoke();
注意、受け入れられた答え結構ですが、それは関数を宣言し、二行でそれを呼び出すよりも長く(遅く41%)として1.41xかかります。
[本当に新しい答えではないことは知っていますが、訪問者にとってどこかにこれを追加することは価値があると感じました。]
詳細:
<?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)
私はこの方法を試してみましたが、最初に関数を定義できる演算子(または関数)を使用することで、トップの回答よりも冗長になっています。
$value = $hack == ($hack = function(){
// just a hack way of executing an anonymous function
return array(0, 1, 2, 3);
}) ? $hack() : $hack();
これは直接的な答えではありませんが、回避策です。PHPを使用する> = 7.名前付きメソッドで匿名クラスを定義し、クラスを作成してすぐにメソッドを呼び出す。
$var = (new class() { // Anonymous class
function cool() { // Named method
return 'neato';
}
})->cool(); // Instantiate the anonymous class and call the named method
echo $var; // Echos neato to console.
call_user_func(function(){/* stuff */})
ばよいですか?