Function de rappel

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Function de rappel

Re: Function de rappel

par CYM » 10 août 2012, 14:27

Effectivement Liro! J'avais pas penser a cette option.

Re: Function de rappel

par Lirio » 10 août 2012, 13:15

Même pour les fonctions, votre manière d'utiliser la fonction de rappel peut-être simplifier.
En effet, plutôt que d'écrire
$myString = 'Foo'; // Définie par l'utilisateur donc variables
$myCallBack = call_user_func($myString);
on peut utiliser :
$myString = 'Foo'; // Définie par l'utilisateur donc variables
$myCallBack = $mysString();
En pratique, on utilise plutôt les fonctions de rappel pour fournir des fonctions en argument d'autres fonctions.
Autrement dit, ce n'est pas call_user_func qui utilise le plus les fonctions de rappels, mais usort, array_filter etc ...

Désolé de ne pas être plus clair :oops:

Re: Function de rappel

par CYM » 09 août 2012, 19:25

Si je comprends bien, la function call_user_func() sert seulement a appeler une function de manière dynamique et n'est pas très utile lorsqu'on utilise un object

Code : Tout sélectionner

$myString = 'Foo'; // Définie par l'utilisateur donc variables $myCallBack = call_user_func($myString);
Ma version d'une function de rappel.

Code : Tout sélectionner

$obj = new Obj; $myString = 'Foo'; // Nom de méthode définie par l'utilisateur; $myMethod = $obj-­­>$myString();
La seul utilité est la function call_user_func_array() qui permet de passer un tableau pour les paramêtres de la function appelée de manière dynamique.

Est-ce que j'ai bien saisie??

Re: Function de rappel

par Lirio » 07 août 2012, 15:03

Autre possibilité : les fonctions de rappel peuvent être répétées sur un tableau via array_filter, array_map ou array_walk
Prenons un exemple.
Imaginons que l'on dispose d'un tableau de valeurs de la forme :
$foo = array(
    'a' => true, 
    'b' => 'Bar !',
    'c' => 421,
    'd' => false,
);
Maintenant, on veut supprimer toutes les valeurs qui ne sont pas des chaines de caratères.
On utilise alors is_string comme fonction de rappel via array_filter.
$result = array_filter($foo, 'is_string');
Donne pour résultat :
array(
    'b' => 'Bar !',
);

Re: Function de rappel

par CYM » 07 août 2012, 15:02

Est-ce que tu est capable de monter un example en code. Je ne figure toujours pas sont utilité car j'utilise surment une technique qui est pas approprié pour faire la même chose.

Re: Function de rappel

par Ryle » 07 août 2012, 14:53

Le principal intérêt est de pouvoir passer une fonction en argument à une autre (c'est à dire de le gérer dans une variable, plutôt qu'en dur). Bon, ok, tu vas me dire que tu n'es plus avancé avec ça, et je te répondrais que c'est normal, ça sera plus parlant avec un exemple ;)

Grossièrement, c'est comme si je te demandais d'effectuer un travail, et que je te laissais un papier avec le numéro de tel à appeler quand tu auras terminé, ou quand tu seras arrivé à un certain point, car il faudra que je te donne une information complémentaire (par exemple un truc qui fluctue et que l'on ne connait donc pas à l'avance)

L'idée est un peu la même ici. Il sera possible de demander à ta fonction de faire un "callback", donc un rappel, d'une autre fonction qu'elle ne connait absolument pas (le numéro de téléphone), une fois qu'elle a fait ce qu'elle avait à faire :)

Est-ce que cela te parait plus clair ?

Function de rappel

par CYM » 07 août 2012, 14:36

Bonjour a tous,

Je suis un débutant en php et j'ai plusieurs questions, mais pour l'instant j'aimerais comprendre l'utilisation d'une fonction de rappel. En fait, quel est l'utilisation d'une fonction de rappel :

function my_callback_function() {
echo 'hello world!';
}

call_user_func('my_callback_function') versus simplement appeler la function my_callback_function();

Ou est l'utilité ?