W3docs

Comprendre les fonctions de rappel en PHP

Découvrez les fonctions de rappel en PHP : ce qu'elles sont, pourquoi les utiliser et comment les employer dans votre code quotidien.

Un callback (ou « callable ») est une fonction que vous passez à une autre fonction afin qu'elle puisse être appelée plus tard. Les callbacks sont à la base des fonctions d'ordre supérieur de PHP — array_map, usort, array_filter et de nombreux hooks de frameworks attendent tous qu'on leur passe un callback. Ce chapitre explique ce qui est considéré comme un callable en PHP, les quatre façons de l'écrire et comment les utiliser au quotidien.

Cette page suppose que vous comprenez déjà les fonctions PHP de base. Si vous débutez avec la définition de fonctions, lisez d'abord ce chapitre.

Que sont les fonctions de rappel PHP ?

Une fonction de rappel PHP est toute fonction passée en argument à une autre fonction, puis invoquée depuis celle-ci. PHP reconnaît une valeur comme callable sous quatre formes :

  • Une chaîne avec le nom d'une fonction'strtoupper' fait référence à la fonction intégrée strtoupper().
  • Une fonction anonyme (closure)function () { ... } assignée à une variable ou passée directement.
  • Une fonction fléchéefn() => ..., une syntaxe abrégée pour les courtes closures (PHP 7.4+).
  • Une référence objet/méthode[$object, 'methodName'] ou ['ClassName', 'staticMethod'].

L'indication de type pour un paramètre qui accepte n'importe laquelle de ces formes est callable. Vous pouvez invoquer la valeur directement ($callback()) ou avec call_user_func() / call_user_func_array() lorsque vous devez transmettre une liste dynamique d'arguments.

Pourquoi utiliser les fonctions de rappel PHP ?

Les callbacks vous permettent d'écrire une fonction une seule fois et de personnaliser son comportement à l'appel, sans la réécrire :

  • Réutilisabilité. Une fonction générique (par ex. « parcourir cette liste et faire quelque chose à chaque élément ») fonctionne pour toute tâche que vous fournissez en tant que callback.
  • Logique plus claire. Les fonctions d'ordre supérieur intégrées comme array_map et array_filter remplacent les boucles manuelles par une seule ligne déclarative.
  • Découplage. Le code piloté par événements — gestionnaires de formulaires, processeurs de commandes CLI, hooks de frameworks — enregistre un callback qui s'exécute uniquement lorsque l'événement se déclenche, gardant le déclencheur et le gestionnaire séparés.

Comment utiliser les fonctions de rappel PHP

L'utilisation des fonctions de rappel PHP est simple. Vous passez simplement le nom de la fonction ou la fonction anonyme en argument à la fonction parente. Voici un exemple d'utilisation d'une fonction nommée comme callback :

Exemple PHP d'utilisation d'une fonction nommée comme callback

php— editable, runs on the server

Dans l'exemple ci-dessus, myCallbackFunction est passée en argument à la parentFunction. Lorsque la parentFunction est exécutée, elle appelle call_user_func et lui passe myCallbackFunction en argument. En conséquence, myCallbackFunction est exécutée et affiche le message "The callback function has been executed."

Voici un exemple d'utilisation d'une fonction anonyme comme callback :

Exemple PHP d'utilisation d'une fonction anonyme comme callback

php— editable, runs on the server

Dans cet exemple, la fonction anonyme est assignée à la variable $myCallbackFunction. Cette variable peut ensuite être passée en argument à la parentFunction, tout comme la fonction nommée dans l'exemple précédent.

À partir de PHP 7.4, vous pouvez également utiliser la syntaxe concise des fonctions fléchées (fn) pour les callbacks simples. Les fonctions fléchées capturent automatiquement les variables de la portée parente et offrent une syntaxe plus propre pour les courts callbacks :

$myCallback = fn() => print("The arrow callback function has been executed.");
parentFunction($myCallback);

Passer des arguments à un callback

La plupart des callbacks utiles reçoivent des données. La fonction parente décide quels arguments passer lors de l'invocation du callback. Utilisez call_user_func() pour les passer par position, ou call_user_func_array() pour transmettre un tableau d'arguments :

<?php

function applyToPair(callable $callback, int $a, int $b) {
  return call_user_func($callback, $a, $b);
}

$add      = fn(int $x, int $y) => $x + $y;
$multiply = fn(int $x, int $y) => $x * $y;

echo applyToPair($add, 4, 6);      // 10
echo "\n";
echo applyToPair($multiply, 4, 6); // 24

Ici, applyToPair ne sait pas si elle additionne ou multiplie — cette décision réside dans le callback que vous passez.

Utiliser les callbacks avec les fonctions intégrées

L'endroit le plus courant où vous utiliserez des callbacks est celui des fonctions de tableaux de PHP. Elles prennent un callback et l'appliquent à travers une liste, remplaçant les boucles écrites à la main.

<?php

$numbers = [1, 2, 3, 4, 5];

// array_map: transform every element
$squares = array_map(fn($n) => $n * $n, $numbers);
echo implode(', ', $squares);   // 1, 4, 9, 16, 25
echo "\n";

// array_filter: keep elements where the callback returns true
$evens = array_filter($numbers, fn($n) => $n % 2 === 0);
echo implode(', ', $evens);     // 2, 4
echo "\n";

// usort: sort using a comparison callback (descending order)
$values = [3, 1, 4, 1, 5];
usort($values, fn($a, $b) => $b <=> $a);
echo implode(', ', $values);    // 5, 4, 3, 1, 1

Pour en savoir plus sur le tri, consultez Trier les tableaux en PHP.

Utiliser les méthodes d'objet comme callbacks

Un callback peut également pointer vers une méthode. Passez [$object, 'methodName'] pour une méthode d'instance, ou ['ClassName', 'staticMethod'] pour une méthode statique :

<?php

class Greeter {
  public function greet(string $name): string {
    return "Hello, {$name}!";
  }

  public static function shout(string $name): string {
    return strtoupper("Hi {$name}");
  }
}

$greeter = new Greeter();

// Instance method as a callback
echo call_user_func([$greeter, 'greet'], 'Ada');   // Hello, Ada!
echo "\n";

// Static method as a callback
echo call_user_func(['Greeter', 'shout'], 'Ada');  // HI ADA

Astuce : Depuis PHP 8.1, vous pouvez utiliser la syntaxe callable de première classe$greeter->greet(...) ou strtoupper(...) — pour obtenir une Closure à partir de n'importe quel callable sans utiliser de chaînes entre guillemets, ce qui est plus sûr et compatible avec les IDE.

Conclusion

En conclusion, les fonctions de rappel PHP sont un outil puissant pour la programmation PHP. Elles permettent la réutilisabilité du code, simplifient le code complexe et facilitent la programmation événementielle côté serveur. En comprenant comment utiliser les fonctions de rappel PHP, vous pouvez porter vos compétences PHP au niveau supérieur.

Pratique

Pratique
Que sont les fonctions de rappel PHP ?
Que sont les fonctions de rappel PHP ?
Was this page helpful?