В JavaScript, вы можете определить анонимные функции, которые выполняются немедленно:Как немедленно выполнить анонимную функцию в PHP?
(function() { /* do something */ })()
Можете ли вы сделать что-то подобное в PHP?
В JavaScript, вы можете определить анонимные функции, которые выполняются немедленно:Как немедленно выполнить анонимную функцию в PHP?
(function() { /* do something */ })()
Можете ли вы сделать что-то подобное в PHP?
Для PHP7: см Yasuo Ohgaki's answer: (function() {echo 'Hi';})();
Для предыдущих версий: единственный способ выполнить их сразу, я могу думать о
call_user_func(function() { echo 'executed'; });
Ну, конечно, вы можете использовать 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";
});
?>
Я хочу сразу же выполнить функцию, потому что функция, которую я определяю, является той, которая НЕ ДОЛЖНА быть вызвана более одного раза при нормальном выполнении.Проблема с определением именованной функции run(), как и у вас, заключается в том, что любой, кто видит код, может подумать, что они могут вызвать run() тоже в некоторой другой части кода. Функция немедленного выполнения дает понять, что этот код не должен запускаться дважды. –
Они не могут вызывать 'run' в вашей функции в какой-либо другой части кода, потому что нет дескриптора вашей функции, существующей после строки, которая немедленно ее выполняет. – Pacerier
Он означает, что он не хочет, чтобы кто-либо еще вызывал функцию, например, запускал любую другую функцию. –
Не выполнено inmediately, но близко к;)
<?php
$var = (function(){ echo 'do something'; });
$var();
?>
Я попробовал этот путь, но это более многословен, чем топ-ответ с помощью любого оператора (или функции), которая позволяет определить функцию первого:
$value = $hack == ($hack = function(){
// just a hack way of executing an anonymous function
return array(0, 1, 2, 3);
}) ? $hack() : $hack();
Тогда почему бы не просто '$ hack = function() {...}; $ Взломать() '? – Soaku
В 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
(new ReflectionFunction(function() {
// body function
}))->invoke();
Вы можете предоставить более подробную информацию? возможно, добавить объяснение? – DeveloperACE
Это самый простой для PHP 7.0 или новее.
php -r '(function() {echo 'Hi';})();'
Это значит создать закрытие, а затем вызвать его как функцию, следуя «()». Работает точно так же, как JS благодаря единому порядку оценки переменной.
Я не PHP 5.3 на моих руках, чтобы попробовать, но как 'call_user_func (функция() {/ * прочее * /})' делать? – Jasper