Je me suis demandé s'il était possible ou non de passer une fonction en paramètre en PHP; Je veux quelque chose comme lorsque vous programmez en JS:
object.exampleMethod(function(){
// some stuff to execute
});
Ce que je veux, c'est exécuter cette fonction quelque part dans exampleMethod. Est-ce possible en PHP?
Réponses:
C'est possible si vous utilisez PHP 5.3.0 ou supérieur.
Voir Fonctions anonymes dans le manuel.
Dans votre cas, vous définiriez
exampleMethod
comme ceci:la source
create_function
create_function()
. Ce n'est pas tout à fait la même chose, car vous devez passer votre fonction sous forme de chaîne de code, qui se retrouve ensuiteeval()
dans les coulisses. Pas idéal, mais vous pourrez peut-être l'utiliser.exampleMethod(strpos);
Juste pour ajouter aux autres, vous pouvez passer un nom de fonction:
Cela fonctionnera en PHP4.
la source
Vous pouvez également utiliser create_function pour créer une fonction en tant que variable et la transmettre. Cependant, j'aime mieux le sentiment des fonctions anonymes . Allez zombat.
la source
Codez-le simplement comme ceci:
ce serait formidable si vous pouviez inventer quelque chose comme ça (inspiré de Laravel Illuminate):
la source
VERSION PHP> = 5.3.0
Exemple 1: basique
Exemple 2: objet std
Exemple 3: appel de classe non statique
Exemple 4: appel de classe statique
la source
Selon la réponse de @ zombat, il est préférable de valider d'abord les fonctions anonymes:
Ou validez le type d'argument depuis PHP 5.4.0:
la source
Testé pour PHP 5.3
Comme je le vois ici, Anonymous Function pourrait vous aider: http://php.net/manual/en/functions.anonymous.php
Ce dont vous aurez probablement besoin et ce n'est pas dit avant, c'est comment passer une fonction sans l'envelopper dans une fonction créée à la volée . Comme vous le verrez plus tard, vous devrez passer le nom de la fonction écrit dans une chaîne en tant que paramètre, vérifier sa "callabilité" puis l'appeler.
La fonction à faire vérifier:
Ensuite, pour l'appeler, utilisez ce morceau de code (si vous avez également besoin de paramètres, placez-les sur un tableau), vu à l' adresse : http://php.net/manual/en/function.call-user-func.php
comme il suit (de manière similaire, sans paramètre):
Voici une classe expliquant comment faire quelque chose de similaire:
et un exemple d'utilisation
la source
Exemple simple utilisant une classe:
la source