[php] 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처럼 작동합니다.

https://3v4l.org/06EL3


답변

(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();