Faire le quiz close

Les fonctions anonymes et les fonctions fléchées

#1 Qu'est-ce qu'une fonction anonyme en PHP ? open

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 :

  1. 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.

  2. 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 et able 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 type callable
    Array-map attend un callable comme premier argument

    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)

    1. array_map parcourt le tableau $tabIn.
    2. Pour chaque élément de $tabIn, le callback est appelé. Et à chaque fois, l'élément courant est passé en argument du callback.
    3. 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
    Déclarer une fonction callback en argument de array_map

#2 Utilisation d'une variable globale dans une fonction anonyme open

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 😏.

Résultat exécution en PHP 8.2.1
Utilisation de use pour voir une variable globale

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).

Résultat exécution en PHP 8.2.1
utilisation de use avec une référence

#3 Qu'est-ce qu'une fonction fléchée en PHP ? open

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 :

  1. J'utilise le mot réservé fn à la place du mot réservé function.
  2. Je mets une flèche => devant l'expression que retourne la fonction.
  3. Je ne mets pas de return.
  4. Si j'ai besoin d'utiliser une variable globale, comme ici $k, hè bien, c'est possible sans précaution particulière.
Résultat exécution en PHP 8.2.1
Utilisation d'une fonction fléchée