Skip to main content

Qué es tap()

tap() es un helper que permite «usar un valor y devolverlo tal cual». Se utiliza cuando quieres intercalar un efecto colateral. La implementación en Illuminate\Support\helpers.php es simple.
tap() ignora el valor de retorno de la callback. El resultado es siempre el valor original.

Uso básico

El uso más habitual: recibir un valor, procesarlo y devolverlo tal cual.
Si omites la callback, se devuelve un HigherOrderTapProxy para encadenar directamente llamadas a métodos.

Casos de uso frecuentes

Intercalar salida de depuración

Insertar logs o disparar eventos en medio de una cadena

Ejecutar solo el efecto colateral sin cambiar el retorno

Si quieres transformar el valor de retorno, usa with() o simplemente asignación normal. Reservar tap() para efectos colaterales facilita la lectura.

Qué es el trait Tappable

Con use del trait Illuminate\Support\Traits\Tappable añades el método tap() a tu clase.
Es decir, ofrece una versión de método de instancia de tap().

Uso en el desarrollo de paquetes

Tappable es útil cuando quieres inyectar efectos colaterales en medio de una API fluida. Combinándolo con Macroable y Conditionable puedes construir builders extensibles al estilo Laravel.
1

Crea una clase fluida

2

Usa Macroable, Conditionable y Tappable juntos

Páginas relacionadas:

Ejemplos en el core de Laravel

tap() / Tappable se usan también dentro del propio Laravel.
  • Illuminate\Routing\Router combina Macroable y Tappable.
  • En Router::respondWithRoute() se usa tap($route)->bind(...) sin callback, devolviendo $route tras ejecutar bind().
  • En Router::prepareResponse() se dispara un evento tras convertir la respuesta con tap(..., fn (...) => event(...)).
  • En Illuminate\Testing\Fluent\Concerns\Has se usa la cadena ->tap(...)->first(...)->etc() para asistir en las aserciones.
tap() es un helper pequeño por sí mismo, pero combinado con Macroable y Conditionable facilita construir las cadenas de métodos claras y legibles típicas de Laravel.

Próximos pasos

Trait Macroable

Aprende el diseño para añadir métodos propios a clases existentes.

Trait Conditionable

Aprende las cadenas con bifurcación condicional mediante when() / unless().
Última modificación el 13 de julio de 2026