Как немедленно выполнить анонимную функцию в PHP?
В JavaScript вы можете определить анонимные функции, которые выполняются немедленно:
(function () { /* do something */ })()
Можете ли вы сделать что-то подобное в PHP?
7 Solutions collect form web for “Как немедленно выполнить анонимную функцию в PHP?”
Для PHP7: см . Ответ Ясуо Огаки : (function() {echo 'Hi';})();
Для предыдущих версий: единственный способ немедленно их выполнить, я могу думать о
call_user_func(function() { echo 'executed'; });
В 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"; }); ?>
Это самый простой для PHP 7.0 или новее.
php -r '(function() {echo 'Hi';})();'
Это означает создание замыкания, а затем называть его функцией, следуя «()». Работает точно так же, как JS благодаря единому порядку оценки переменной.
(new ReflectionFunction(function() { // body function }))->invoke();
Я пробовал это так, но это более подробный, чем главный ответ, с помощью любого оператора (или функции), который позволяет вам сначала определить функцию:
$value = $hack == ($hack = function(){ // just a hack way of executing an anonymous function return array(0, 1, 2, 3); }) ? $hack() : $hack();
Не выполняется сразу, но близко к;)
<?php $var = (function(){ echo 'do something'; }); $var(); ?>