## Fonction Fléchée

Les fonctions fléchées ont été introduites en PHP 7.4 en tant que syntaxe plus concise pour les fonctions anonymes.

Les fonctions anonymes comme les fonctions fléchées sont implémentées en utilisant la classe Closure.

Les fonctions fléchées ont la forme basique `fn (argument_list) => expr`.

Les fonctions fléchées supportent les mêmes fonctionnalités que les fonctions anonymes, à l'exception que l'utilisation des variables de la portée parente est automatique.

Quand une variable utilisée dans l'expression est définie dans la portée parente, elle sera implicitement capturée par valeur. Dans l'exemple suivant, les fonctions $fn1 et $fn2 se comportent de façon identique.

Exemple #1 Les fonctions fléchées capturent les variables par valeur automatiquement

    <?php
    $y = 1;

    $fn1 = fn($x) => $x + $y;
    // équivalent à utiliser $y par valeur :
    $fn2 = function ($x) use ($y) {
        return $x + $y;
    };

    var_export($fn1(3));

L'exemple ci-dessus va afficher :

    4

Ceci fonctionne aussi si les fonctions fléchées sont imbriquées :

Exemple #2 Les fonctions fléchées capturent les variables par valeur automatiquement, même imbriquées

    <?php
    $z = 1;
    $fn = fn($x) => fn($y) => $x * $y + $z;
    // Affiche 51
    var_export($fn(5)(10));

Similairement aux fonctions anonymes, la syntaxe des fonctions fléchées permet les signatures de fonction arbitraire, ceci inclut les types de paramètres et de retour, valeur par défaut, variable, aussi bien que le passage et retour par référence. Tous les exemples suivants sont des fonctions fléchées valides :

Exemple #3 Exemples de fonctions fléchées

    <?php
    fn(array $x) => $x;
    static fn($x): int => $x;
    fn($x = 42) => $x;
    fn(&$x) => $x;
    fn&($x) => $x;
    fn($x, ...$rest) => $rest;

Les fonctions fléchées lient les variables par valeur. Ceci est à peu près équivalent à effectuer un `use($x)` pour chaque variable $x utilisée à l'intérieur de la fonction fléchée. Un liage par valeur signifie qu'il n'est pas possible de modifier une valeur de la portée extérieure. Les fonctions anonymes peuvent être utilisées à la place pour des liaisons par référence.

Exemple #4 Valeurs de la portée extérieure ne peuvent pas être modifiées par les fonctions fléchées

    <?php
    $x = 1;
    $fn = fn() => $x++; // N'a aucun effet
    $fn();
    var_export($x);  // Affiche 1

### Historique

Version | Description
--- | ---
7.4.0 | Les fonctions fléchées sont désormais disponibles.

### Notes

> Note: Il est possible d'utiliser func_num_args(), func_get_arg(), et func_get_args() depuis l'intérieur d'une fonction fléchée.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open