PHP에서 익명 함수를 즉시 실행하려면 어떻게해야합니까?
JavaScript에서는 즉시 실행되는 익명 함수를 정의 할 수 있습니다.
(function () { /* do something */ })()
PHP에서 그런 식으로 할 수 있습니까?
PHP7의 경우 Yasuo Ohgaki의 답변을 참조하십시오 .(function() {echo 'Hi';})();
이전 버전의 경우 : 즉시 실행할 수있는 유일한 방법은
call_user_func(function() { echo 'executed'; });
In PHP 7
은 자바 스크립트에서 똑같이하는 것입니다
$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";
});
?>
이것은 PHP 7.0 이상에서 가장 간단합니다.
php -r '(function() {echo 'Hi';})();'
클로저를 생성하고 "()"를 따라 함수로 호출하는 것을 의미합니다. 균일 한 변수 평가 순서 덕분에 JS처럼 작동합니다.
(new ReflectionFunction(function() {
// body function
}))->invoke();
Note, accepted answer is fine but it takes 1.41x as long (41% slower) than declaring a function and calling it in two lines.
[I know it's not really a new answer but I felt it was valuable to add this somewhere for visitors.]
Details:
<?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);
?>
Results:
$ php test8.php
test1_anonfunc_call took 0.0081379413604736s (1228812.0001172/s)
test2_anonfunc_call_user_func took 0.011472940444946s (871616.13432805/s)
I tried it out this way, but it's more verbose than the top answer by using any operator (or function) that allows you to define the function first:
$value = $hack == ($hack = function(){
// just a hack way of executing an anonymous function
return array(0, 1, 2, 3);
}) ? $hack() : $hack();
This isn't a direct answer, but a workaround. Using PHP >= 7. Defining an anonymous class with a named method and constructing the class and calling the method right away.
$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.
Not executed inmediately, but close to ;)
<?php
$var = (function(){ echo 'do something'; });
$var();
?>
'developer tip' 카테고리의 다른 글
저장소에 있지 않고 Git 명령을 실행하려면 어떻게해야합니까? (0) | 2020.08.31 |
---|---|
부트 스트랩 드롭 다운 메뉴가 작동하지 않음 (0) | 2020.08.31 |
Gdb는 stdout 대신 파일로 인쇄 (0) | 2020.08.30 |
번 들러 대 RVM 대 gems 대 RubyGems 대 gemsets 대 시스템 루비 (0) | 2020.08.30 |
Swift 배열에서 작업 (연합, 교차)을 설정 하시겠습니까? (0) | 2020.08.30 |