variable - Comment exécuter immédiatement une fonction anonyme en PHP?



php function variable (6)

Bien sûr, vous pouvez utiliser call_user_func , mais il existe encore une autre alternative assez 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";
});

?>

https://code.i-harness.com

En JavaScript, vous pouvez définir des fonctions anonymes qui sont exécutées immédiatement:

(function () { /* do something */ })()

Pouvez-vous faire quelque chose comme ça en PHP?


C'est le plus simple pour PHP 7.0 ou plus tard.

php -r '(function() {echo 'Hi';})();'

Cela signifie créer une fermeture, puis l'appeler comme fonction en suivant "()". Fonctionne comme JS grâce à un ordre d'évaluation variable uniforme.

https://3v4l.org/06EL3


Je l'ai essayé de cette façon, mais c'est plus bavard que la première réponse en utilisant n'importe quel opérateur (ou fonction) qui vous permet de définir la fonction en premier:

    $value = $hack == ($hack = function(){
            // just a hack way of executing an anonymous function
            return array(0, 1, 2, 3);                
    }) ? $hack() : $hack();

Non exécuté immédiatement, mais proche de;)

<?php

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

?>

Remarque, la réponse acceptée est correcte, mais elle prend 1,41 fois plus longtemps (41% plus lentement) que la déclaration d'une fonction et l'appel en deux lignes.

[Je sais que ce n'est pas vraiment une nouvelle réponse, mais j'ai trouvé qu'il était utile d'ajouter ceci quelque part pour les visiteurs.]

Détails:

<?php
# Tags: benchmark, call_user_func, anonymous function 
require_once("Benchmark.php");
bench(array(
        'test1_anonfunc_call' => function(){
                $f = function(){
                        $x = 123;
                };
                $f();
        },
        'test2_anonfunc_call_user_func' => function(){
                call_user_func(
                        function(){
                                $x = 123;
                        }
                );
        }
), 10000);
?>

Résultats:

$ php test8.php
test1_anonfunc_call took 0.0081379413604736s (1228812.0001172/s)
test2_anonfunc_call_user_func took 0.011472940444946s (871616.13432805/s)

(new ReflectionFunction(function() {
 // body function
}))->invoke();




function