2010-08-25 19 views

Respuesta

105

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'; }); 
+12

A menos que (o, hasta que) [funcione el encadenamiento de llamadas] (http://wiki.php.net/rfc/fcallfcall) se presente, esta sería mi sugerencia también. – salathe

+2

@Gordon: php 5.4 ¿Todavía nada? – dynamic

+0

@ yes123 nope. Todavía tiene que usar 'call_user_func' – Gordon

14

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"; 
}); 

?> 
+1

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. –

+3

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

+0

Quiere decir que no quiere que nadie más llame a una función como ejecutar cualquier otra función. –

-1

No es ejecutado inmediatamente, pero cerca;)

<?php 

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

?> 
0

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(); 
+0

Entonces, ¿por qué no simplemente '$ hack = function() {...}; $ hack() '? – Soaku

19

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 
5
(new ReflectionFunction(function() { 
// body function 
}))->invoke(); 
+4

puede proporcionar más detalles? tal vez agregar una explicación? – DeveloperACE

7

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.

https://3v4l.org/06EL3

Cuestiones relacionadas