Skip to main content

Cos’è tap()

tap() è un helper che permette di “usare un valore e restituirlo così com’è”. Lo si utilizza quando si vuole intercalare un side effect. L’implementazione in Illuminate\Support\helpers.php è semplice.
tap() ignora il valore di ritorno del callback. Il valore restituito è sempre il valore originale.

Uso di base

L’uso più elementare consiste nel ricevere un valore, elaborarlo e restituirlo così com’è.
Omettendo il callback ottieni un HigherOrderTapProxy, quindi puoi concatenare direttamente le chiamate di metodo.

Casi d’uso frequenti

Inserire output di debug

Inserire log o eventi all’interno di una catena

Eseguire solo un side effect senza cambiare il valore restituito

Se vuoi trasformare il valore di ritorno, usa with() o una normale assegnazione a una variabile. Limitando tap() ai side effect il codice resta più leggibile.

Cos’è il trait Tappable

Usando Illuminate\Support\Traits\Tappable puoi aggiungere alla tua classe il metodo tap().
In pratica, offre solo la versione a livello di istanza di tap().

Utilizzo nello sviluppo di pacchetti

Tappable è utile quando vuoi inserire un side effect all’interno di un’API fluent. Combinandolo con Macroable e Conditionable puoi creare builder estendibili in perfetto stile Laravel.
1

Creare una classe fluent

2

Combinare Macroable, Conditionable e Tappable

Pagine correlate:

Esempi d’uso nel core di Laravel

Anche il core di Laravel utilizza tap() / Tappable.
  • Illuminate\Routing\Router combina Macroable e Tappable
  • In Router::respondWithRoute() viene usato tap($route)->bind(...) senza callback, restituendo la $route originale anche dopo l’esecuzione di bind()
  • In Router::prepareResponse(), dopo la conversione della risposta, viene emesso un evento con tap(..., fn (...) => event(...))
  • In Illuminate\Testing\Fluent\Concerns\Has il pattern ->tap(...)->first(...)->etc() viene usato per implementare helper di assertion
Da solo tap() è un piccolo helper, ma combinato con Macroable e Conditionable rende più facile scrivere le catene di metodi leggibili tipiche di Laravel.

Prossimi passi

Trait Macroable

Impara come progettare l’aggiunta di metodi personalizzati a classi esistenti.

Trait Conditionable

Impara le catene condizionali con when() / unless().
Ultima modifica il 13 luglio 2026