En JavaScript, puede definir funciones anónimas que se ejecutan inmediatamente:¿Cómo ejecuto de inmediato una función anónima en PHP?
(function() { /* do something */ })()
¿Se puede hacer algo así en PHP?
En JavaScript, puede definir funciones anónimas que se ejecutan inmediatamente:¿Cómo ejecuto de inmediato una función anónima en PHP?
(function() { /* do something */ })()
¿Se puede hacer algo así en PHP?
Para PHP7: ver Yasuo Ohgaki's answer: (function() {echo 'Hi';})();
Para las versiones anteriores: la única manera de ejecutarlos inmediatamente se me ocurre es
call_user_func(function() { echo 'executed'; });
Bueno, por supuesto que puede utilizar call_user_func
, pero todavía hay otra alternativa bastante simple:
<?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";
});
?>
Quiero una función de ejecución inmediata, porque la función que estoy definiendo es una que NO DEBE llamarse más de una vez en la ejecución normal.El problema con la definición de una función nombrada, ejecutar(), como la que tiene, es que cualquier otra persona que vea el código puede pensar que puede llamar también a run() en alguna otra parte del código. La función de ejecución inmediata deja en claro que este código no debe ejecutarse dos veces. –
No pueden invocar 'run' en su función en alguna otra parte del código porque no existe un identificador para su función existente después de la línea que lo ejecuta inmediatamente. – Pacerier
Quiere decir que no quiere que nadie más llame a una función como ejecutar cualquier otra función. –
No es ejecutado inmediatamente, pero cerca;)
<?php
$var = (function(){ echo 'do something'; });
$var();
?>
lo probé de esta manera, pero es más detallada que la respuesta más común mediante el uso de cualquier operador (o función) que le permite definir la función primera:
$value = $hack == ($hack = function(){
// just a hack way of executing an anonymous function
return array(0, 1, 2, 3);
}) ? $hack() : $hack();
Entonces, ¿por qué no simplemente '$ hack = function() {...}; $ hack() '? – Soaku
En PHP 7
es hacer lo mismo en javascript
$gen = (function() {
yield 1;
yield 2;
return 3;
})();
foreach ($gen as $val) {
echo $val, PHP_EOL;
}
echo $gen->getReturn(), PHP_EOL;
la salida es:
1
2
3
(new ReflectionFunction(function() {
// body function
}))->invoke();
puede proporcionar más detalles? tal vez agregar una explicación? – DeveloperACE
Este es el más simple para PHP 7.0 o posterior.
php -r '(function() {echo 'Hi';})();'
Significa crear el cierre, luego llamarlo como función siguiendo "()". Funciona igual que JS gracias a un orden de evaluación variable uniforme.
que no tienen PHP 5.3 en mis manos para probar, pero ¿cómo 'call_user_func (function() {/ * cosas * /})' Hacer? – Jasper