Connaissez-vous les différentes manières d’utiliser une fonction callback (ou fonction de rappel en bon français) en paramètre de la fonction usort
Tout le monde connaît la méthode la plus simple qui consiste à donner en paramètre le nom d’une fonction globale, comme montré dans l’exemple suivant:
1 2 3 4 5 |
|
Un bon petit bout de code qui fait ce qu’on lui demande: il compare deux éléments du tableau et renvoie un résultat indiquant lequel des deux éléments est plus grand que l’autre…
Le problème avec ce morceau de code, c’est qu’on pollue l’espace global de notre application avec une fonction qui ne sera utilisée que pour notre appel à la fonction usort. Ce serait quand-même bien de pouvoir utiliser notre fonction usort dans une classe par exemple, avec une fonction callback privée qui ne serait pas accessible en dehors de la-dite classe (histoire d’éviter justement cette pollution de l’espace global).
Un rapide coup d’oeil dans la documentation de PHP nous donne toutes les informations nécessaires quant aux différentes syntaxes possibles.
Voyons les différentes possibilités offertes par le langage PHP:
- L’appel d’une méthode statique d’une classe:
1 2 3 4 5 6 7 |
|
- L’appel d’une méthode publique d’un objet:
1 2 3 4 5 6 7 8 |
|
- Cette syntaxe pour l’appel d’une méthode statique d’une classe n’est possible que depuis la version 5.2.3 de PHP:
1 2 3 4 5 6 7 |
|
- Utilisation de la fonction usort dans une classe avec un appel à une méthode privée:
1 2 3 4 5 6 7 8 |
|
- Alors ça c’est vraiment cool:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Voilà! Je pense que nous avons fait le tour de la question. Un sujet somme toute relativement intéressant.
Et juste pour la petite histoire, c’est une syntaxe que j’utilise énormément lorsque je développe un plugin pour Wordpress… Un petit exemple rapide vaut mieux qu’un long discours (pas forcément vrai dans le cas du SEO mais ça ce sera pour une prochaine fois!):
1 2 3 4 5 6 7 8 9 10 |
|
Pour info, c’est en lisant cette question sur Stackoverflow que je me suis intéressé au sujet.