PHP 8.4 Essentials
Thème :
Junior
1 vues ·13/23 leçonsFonctions Anonymes & Closures
Les fonctions anonymes (aussi appelées closures) sont des fonctions sans nom. Elles sont très utiles pour les callbacks et les fonctionnalités ponctuelles.
Fonction Anonyme de Base
<?php
$saluer = function(string $nom): string {
return "Bonjour, $nom !";
};
echo $saluer("Alice"); // Bonjour, Alice !
En tant que Callbacks
<?php
$nombres = [1, 2, 3, 4, 5];
// Doubler chaque nombre
$doubles = array_map(function($n) {
return $n * 2;
}, $nombres);
print_r($doubles); // [2, 4, 6, 8, 10]
// Filtrer les nombres pairs
$pairs = array_filter($nombres, function($n) {
return $n % 2 === 0;
});
print_r($pairs); // [2, 4]
Capturer des Variables avec use
Les closures peuvent accéder aux variables de la portée extérieure :
<?php
$multiplicateur = 3;
$multiplier = function(int $n) use ($multiplicateur): int {
return $n * $multiplicateur;
};
echo $multiplier(5); // 15
Capturer par Référence
<?php
$total = 0;
$ajouter = function(int $montant) use (&$total): void {
$total += $montant; // Modifie la variable originale
};
$ajouter(10);
$ajouter(20);
echo $total; // 30
Fonctions Fléchées — Arrow Functions (PHP 7.4+)
Syntaxe courte pour les closures simples :
<?php
// Closure traditionnelle
$doubler = function($n) {
return $n * 2;
};
// Fonction fléchée (équivalent)
$doubler = fn($n) => $n * 2;
echo $doubler(5); // 10
Caractéristiques des Fonctions Fléchées
- Capture automatique des variables extérieures (pas besoin de
use). - Expression unique uniquement (retour implicite).
- Pas d’instructions multiples.
<?php
$facteur = 3;
// La fonction fléchée capture $facteur automatiquement
$multiplier = fn($n) => $n * $facteur;
$nombres = [1, 2, 3];
$resultat = array_map(fn($n) => $n * $facteur, $nombres);
// [3, 6, 9]
Syntaxe Callable de Première Classe (PHP 8.1+)
Créer une closure depuis n’importe quel callable existant :
<?php
class Calculatrice {
public function additionner(int $a, int $b): int {
return $a + $b;
}
}
$calc = new Calculatrice();
$addition = $calc->additionner(...);
echo $addition(2, 3); // 5
Exemples de code
Filtrage et transformation de données avec des fonctions fléchées
<?php
$produits = [
['nom' => 'Ordinateur', 'prix' => 999, 'categorie' => 'electronique'],
['nom' => 'T-Shirt', 'prix' => 29, 'categorie' => 'vetements'],
['nom' => 'Téléphone', 'prix' => 699, 'categorie' => 'electronique'],
['nom' => 'Pantalon', 'prix' => 49, 'categorie' => 'vetements'],
];
$prixMin = 50;
// Filtrer les produits électroniques au-dessus du prix minimum
$electroniquesChers = array_filter(
$produits,
fn($p) => $p['categorie'] === 'electronique' && $p['prix'] >= $prixMin
);
// Extraire seulement les noms
$noms = array_map(fn($p) => $p['nom'], $electroniquesChers);
print_r($noms); // ['Ordinateur', 'Téléphone']
?>
Ressources
- Fonctions Anonymes — Guide officiel sur les closures et fonctions anonymes PHP
- Fonctions Fléchées — Documentation des arrow functions PHP 7.4+
📘 Cette leçon fait partie du cours PHP Essentials sur la plateforme d’apprentissage RostoDev.
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur Fonctions Anonymes & Closures. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.