Skip to main content

Qu’est-ce que tap()

tap() est un helper qui permet « d’utiliser une valeur tout en la renvoyant telle quelle ». Il sert à insérer un effet de bord. L’implémentation dans Illuminate\Support\helpers.php est simple.
tap() ignore la valeur retournée par le callback. La valeur retournée est toujours la valeur d’origine.

Utilisation de base

L’usage le plus courant : recevoir une valeur, la traiter, puis la renvoyer telle quelle.
Sans callback, un HigherOrderTapProxy est renvoyé, ce qui permet d’enchaîner directement des appels de méthode.

Cas d’utilisation fréquents

Insérer une sortie de débogage

Injecter des logs ou des événements dans une chaîne

Exécuter uniquement des effets de bord sans changer la valeur retournée

Si vous souhaitez transformer la valeur retournée, utilisez with() ou une affectation de variable classique. Réserver tap() aux effets de bord améliore la lisibilité.

Qu’est-ce que le trait Tappable

En faisant use Illuminate\Support\Traits\Tappable, vous ajoutez une méthode tap() à votre classe.
Elle fournit donc une version méthode d’instance du helper tap().

Utilisation en développement de packages

Tappable est pratique pour glisser un effet de bord au milieu d’une API fluide. Associé à Macroable et Conditionable, vous pouvez créer un builder extensible dans l’esprit Laravel.
1

Créer une classe fluide

2

Combiner Macroable, Conditionable et Tappable

Pages associées :

Utilisations dans le cœur de Laravel

Le cœur de Laravel utilise réellement tap() / Tappable.
  • Illuminate\Routing\Router combine Macroable et Tappable.
  • Router::respondWithRoute() utilise tap($route)->bind(...) sans callback : après l’exécution de bind(), la $route d’origine est renvoyée.
  • Router::prepareResponse() utilise tap(..., fn (...) => event(...)) pour déclencher un événement après la conversion de la réponse.
  • Illuminate\Testing\Fluent\Concerns\Has implémente une aide aux assertions via la chaîne ->tap(...)->first(...)->etc().
Pris isolément, tap() est un petit helper, mais combiné à Macroable et Conditionable, il facilite l’écriture de chaînes de méthodes lisibles très fréquentes dans Laravel.

Étapes suivantes

Trait Macroable

Découvrez la conception permettant d’ajouter des méthodes personnalisées aux classes existantes.

Trait Conditionable

Découvrez les chaînes conditionnelles via when() / unless().
Dernière modification le 13 juillet 2026