W3docs

fn

Le mot-clé "fn" introduit en PHP 7.4 permet de créer des fonctions fléchées, une notation abrégée pour les fonctions anonymes à expression unique.

Le mot-clé PHP fn (fonctions fléchées)

Le mot-clé fn, introduit dans PHP 7.4, crée des fonctions fléchées — une syntaxe concise pour écrire des fonctions anonymes à expression unique. Une fonction fléchée retourne la valeur d'une seule expression et capture automatiquement les variables qu'elle utilise depuis la portée environnante. Cela la rend idéale pour les courts rappels passés aux fonctions de tableau comme array_map, array_filter et array_reduce.

Cette page couvre la syntaxe, la façon dont la capture de variables diffère des fermetures classiques, les principales règles et pièges, ainsi que des exemples pratiques.

Syntaxe

Une fonction fléchée utilise fn, une liste de paramètres, l'opérateur => (fat arrow), et une expression unique dont la valeur est retournée implicitement :

$arrowFunction = fn($parameter) => expression;

Il n'y a pas de corps { ... } ni d'instruction return — les deux sont interdits. L'expression après => est la valeur de retour.

$square = fn($n) => $n * $n;
echo $square(4); // 16

Capture automatique des variables (pas de use nécessaire)

La plus grande différence par rapport à une fermeture classique (function () use (...) { ... }) est qu'une fonction fléchée capture automatiquement par valeur chaque variable de la portée parente qu'elle référence. Vous n'écrivez jamais de clause use :

php— editable, runs on the server

Comme la capture est par valeur uniquement, les fonctions fléchées ne peuvent pas modifier une variable externe par référence. Si vous en avez besoin, utilisez plutôt une fermeture complète avec use (&$var).

Exemples

Les fonctions fléchées excellent en tant que rappels d'une ligne. L'expression est retournée automatiquement, donc aucun return n'est nécessaire.

<?php

// array_reduce — sum a list
$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, fn($carry, $number) => $carry + $number);
echo $sum . PHP_EOL; // 15

// array_filter — keep names longer than 4 characters
$names = ["John", "Maryjane", "Paul", "Jane"];
$filtered = array_filter($names, fn($name) => strlen($name) > 4);
print_r($filtered); // Array ( [1] => Maryjane )

// array_map — apply 20% tax to each price
$prices = [10, 20, 30];
$withTax = array_map(fn($p) => $p * 1.2, $prices);
print_r($withTax); // Array ( [0] => 12 [1] => 24 [2] => 36 )

// Nested arrow functions (currying) — each captures from its parent
$adder = fn($x) => fn($y) => $x + $y;
echo $adder(3)(4) . PHP_EOL; // 7

Pour en savoir plus sur le passage de fonctions comme rappels, consultez les fonctions de rappel PHP.

Règles et pièges

  • Une seule expression. Les fonctions fléchées ne peuvent pas contenir d'instructions, de boucles ou de plusieurs lignes. Si votre logique nécessite un bloc, utilisez une fermeture complète avec function () use (...) { ... }.
  • La capture est par valeur. Modifier une variable capturée à l'intérieur de la fonction fléchée n'affecte pas la variable externe, et les modifications ultérieures de la variable externe ne sont pas visibles.
  • Pas de capture par référence. Vous ne pouvez pas utiliser use (&$var) ; utilisez une fermeture complète lorsque vous avez besoin de modifier un état externe.
  • Les annotations de type et les valeurs par défaut sont autorisées : fn(int $n = 0): int => $n + 1.
  • PHP 7.4+ uniquement. Sur les versions plus anciennes, revenez à function () use (...) { ... }.

fn vs. function (fermetures)

Fonction fléchée (fn)Fermeture (function)
Capture de variablesAutomatique, par valeurExplicite via use
CorpsExpression uniqueBloc d'instructions complet
Mot-clé returnImpliciteObligatoire
Capture par référenceNonOui, avec use (&$var)
Disponible depuisPHP 7.4PHP 5.3

Optez pour fn lorsque vous avez un court rappel à expression unique. Utilisez une fermeture complète lorsque vous avez besoin de plusieurs instructions, d'une capture par référence, ou que vous souhaitez être explicite sur ce que vous capturez.

Voir aussi : Fonctions PHP · portée des variables.

Pratique

Pratique
Quelles sont les caractéristiques des fonctions PHP telles qu'indiquées dans l'article à l'URL fournie ?
Quelles sont les caractéristiques des fonctions PHP telles qu'indiquées dans l'article à l'URL fournie ?
Was this page helpful?