Как немедленно выполнить анонимную функцию в PHP?

В JavaScript вы можете определить анонимные функции, которые выполняются немедленно:

(function () { /* do something */ })()

Можете ли вы сделать что-то подобное в PHP?

Ответ 1

Для PHP7: см. Ответ Ясуо Огаки: (function() {echo 'Hi';})();

Для предыдущих версий: единственный способ выполнить их сразу, о которых я могу думать, - это

call_user_func(function() { echo 'executed'; });

Ответ 2

В 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

Ответ 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";
});

?>

Ответ 4

Это самый простой для PHP 7.0 или новее.

php -r '(function() {echo 'Hi';})();'

Это означает создание замыкания, а затем вызывает его как функцию, следуя "()". Работает точно так же, как JS благодаря единому порядку оценки переменной.

https://3v4l.org/06EL3

Ответ 5

(new ReflectionFunction(function() {
 // body function
}))->invoke();

Ответ 6

Я пробовал это так, но это более подробный, чем верхний ответ, с помощью любого оператора (или функции), который позволяет вам сначала определить функцию:

    $value = $hack == ($hack = function(){
            // just a hack way of executing an anonymous function
            return array(0, 1, 2, 3);                
    }) ? $hack() : $hack();

Ответ 7

Не выполняется сразу, но близко к;)

<?php

$var = (function(){ echo 'do something'; });
$var();

?>