В JavaScript вы можете определить анонимные функции, которые выполняются немедленно:
(function () { /* do something */ })()
Можете ли вы сделать что-то подобное в PHP?
В JavaScript вы можете определить анонимные функции, которые выполняются немедленно:
(function () { /* do something */ })()
Можете ли вы сделать что-то подобное в 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();
?>