2010-10-25 4 views
2

Certaines fonctions de PHP nécessitent une fonction de rappel. Comment puis-je faire cela dans une fonction moi-même? Tout d'abord, comment définir une fonction qui nécessite une fonction de rappel?PHP: Fonctions de rappel

Et deuxièmement, comment puis-je fournir une fonction personnalisée comme fonction de rappel? Comment puis-je fournir une fonction régulière, une fonction d'instance et une fonction statique?

+0

lire le manuel - http://php.net/manual/en/language.pseudo-types.php .Ce est le premier résultat d'une recherche google sur « la fonction de rappel php » – thetaiko

+0

double possible [Comment implémenter un rappel en PHP?] (Http://stackoverflow.com/questions/48947/how-do-i-implement-a-callback-in-php) – Gordon

+0

Gardez à l'esprit que PHP 5.3 a introduit des fermetures, et donc l'utilisation du rappel peut être différente entre pré-5.3 et 5.3+. – erjiang

Répondre

1

Utilisez le construit en call_user_func(). Il peut être nécessaire d'utiliser call_user_func_array()

function work($a, $c) { 
    $a = filter($a) 
    if(!is_callable($c) || !call_user_func($c, $a)) { 
    return 0; // throw error 
    } else { 
    return 1; // return success 
    } 
} 

Cela est plus sûr que de faire $c($a) a.k.a passed_callback (passed_argument) parce que vérifier si la fonction existe réellement est fait pour vous, bien que certains ont fait des commentaires sur la dégradation des performances sur $c($a).

+1

Il serait peut-être préférable d'utiliser d'abord is_callable(), pour s'assurer que $ c est une fonction appelable. – mellowsoon

+0

@mellowsoon: Bon point. Réponse mise à jour –

+0

J'utiliserais probablement quelque chose de similaire à votre code pour être complet, mais je ne suis pas sûr que cela fasse une différence. Passer une fonction non appelable va provoquer l'une des deux choses suivantes: Votre code va lancer une erreur parce que vous avez utilisé is_callable, ou PHP va lancer une erreur car $ c() n'est pas un callback valide. Le résultat final est le même, mais le dernier est plus rapide car il évite d'appeler is_callable et call_user_func. – mellowsoon

1
function myFunc($param1, $param2, $callback) { 
    $data = get_data($param1, $param2) 
    $callback($data); 
} 
1

Vous pouvez utiliser l'indication de type pour forcer quelqu'un à utiliser un type spécifique de variable.

function test(callable $test){ 
    echo __LINE__.PHP_EOL; 
    $test(); 
    echo __LINE__.PHP_EOL; 
} 

test(function(){ 
    echo __LINE__.PHP_EOL; 
});