Les fonctions anonymes et les fonctions fléchées
#1
Qu'est-ce qu'une fonction anonyme en PHP ?
Comme leur dénomination l'indique, les fonctions anonymes, au moment de leur déclaration, n'ont pas de nom. Du coup, pour appeler la fonction, il va falloir trouver un autre moyen que d'utiliser le nom de la fonction qui justement, dans ce cas-là n'existe pas 😏. PHP propose deux solutions :
-
Première solution : Affecter la fonction anonyme à une variable. Le nom de la variable servira à appeler la fonction. Ci-dessous, je déclare une fonction anonyme qui fait le carré d'un nombre. Je vais en fait utiliser la variable
$carrer
pour stocker la fonction.J'affecte à cette variable une déclaration de fonction classique sauf qu'il n'y a pas de nom. Je code le corps de ma fonction exactement comme une fonction classique. Attention cependant, il faut un point virgule à la fin de cette déclaration, de façon à terminer l'instruction d'affectation.
Ensuite, pour appeler la fonction, je me sers du nom de la variable que je fais suivre par des parenthèses qui contiennent les arguments.
-
Deuxième solution : Passer la déclaration d'une fonction anonyme en argument d'une autre fonction. Ci-dessous, je passe la déclaration d'une fonction anonyme, à la fonction
array_map
. On va regarder ce que cette fonction prend en argument et ensuite, on va regarder ce qu'elle fait de ces arguments 😃.Cette fonction prend, comme premier argument, un callback. Ici il faut voir que PHP utilise, pour typer un callback, le type
callable
(*call
pour appeler etable
pour "être capable de". Donc ça nous fait "être capable d'être appelé" et on peut traduire par "appelable").array_map
attend un premier argument de typecallable
Ensuite, comme deuxième argument,
array_map
attend un tableau d'entrée (* ou plusieurs). Je lui fournis$tabIn
.Que fait
array_map
, de ces arguments dans son corps de fonction ? (* La partie que nous ne voyons pas)array_map
parcourt le tableau$tabIn
.- Pour chaque élément de
$tabIn
, le callback est appelé. Et à chaque fois, l'élément courant est passé en argument du callback. - Ensuite
array_map
retourne un tableau. Ce tableau est le résultat, de l'application du callback, sur chaque élément du tableau d'entrée.
Résultat exécution en PHP 8.2.1
#2
Utilisation d'une variable globale dans une fonction anonyme
Pour utiliser une variable globale dans une fonction anonyme, vous n'êtes pas obligé d'utiliser le mot réservé global
comme il faut le faire dans une fonction nommée.
Vous pouvez utiliser le mot réservé use
directement dans la déclaration de la fonction. Je trouve que c'est plus lisible, car au moins, vous voyez au niveau de la déclaration que vous utilisez une information extérieure à la fonction 😏.

Si vous voulez modifier la valeur de $k
dans la fonction et conserver cette modification après l'appel de la fonction, alors, il faut déclarer une référence dans le use
. Soit use (&$k)
.

#3
Qu'est-ce qu'une fonction fléchée en PHP ?
Lorsqu'une fonction retourne une expression, alors, il est possible de déclarer cette fonction de manière plus succincte en utilisant une fonction fléchée.
Ci-dessous, j'utilise une fonction fléchée. Pour cela :
- J'utilise le mot réservé
fn
à la place du mot réservéfunction
. - Je mets une flèche
=>
devant l'expression que retourne la fonction. - Je ne mets pas de
return
. - Si j'ai besoin d'utiliser une variable globale, comme ici
$k
, hè bien, c'est possible sans précaution particulière.
