Skip to main content

Was ist tap()?

tap() ist ein Helper, der „einen Wert benutzt und ihn dennoch unverändert zurückgibt”. Er kommt zum Einsatz, wenn Sie einen Seiteneffekt einschleifen möchten. Die Implementierung in Illuminate\Support\helpers.php ist schlicht:
tap() ignoriert den Rückgabewert des Callbacks. Zurückgegeben wird stets der ursprüngliche Wert.

Grundlegende Verwendung

Der grundlegendste Einsatz besteht darin, den Wert zu übernehmen, etwas damit zu tun und ihn unverändert zurückzugeben.
Ohne Callback erhalten Sie einen HigherOrderTapProxy — so lässt sich der Methodenaufruf direkt anfügen.

Typische Einsatzstellen

Debug-Ausgabe einfügen

Logging oder Event-Versand innerhalb der Chain einfügen

Seiteneffekte ausführen, ohne den Rückgabewert zu verändern

Wollen Sie den Rückgabewert transformieren, nutzen Sie with() oder eine gewöhnliche Variablenzuweisung. Beschränken Sie tap() auf Seiteneffekte — das steigert die Lesbarkeit.

Was ist der Tappable-Trait?

Wenn Sie Illuminate\Support\Traits\Tappable per use einbinden, erhält Ihre Klasse eine tap()-Methode.
Kurz gesagt bietet der Trait lediglich eine Instanzmethoden-Variante von tap().

Einsatz in der Paketentwicklung

Tappable ist praktisch, wenn Sie in einer Fluent API einen Seiteneffekt einbauen möchten. In Kombination mit Macroable und Conditionable bauen Sie einen Laravel-typischen, erweiterbaren Builder.
1

Eine Fluent-Klasse anlegen

2

Macroable, Conditionable und Tappable kombiniert nutzen

Verwandte Seiten:

Verwendung im Laravel-Kern

Auch im Laravel-Kern selbst kommen tap() und Tappable zum Einsatz.
  • Illuminate\Routing\Router verwendet Macroable und Tappable gemeinsam.
  • In Router::respondWithRoute() wird ohne Callback tap($route)->bind(...) genutzt und die ursprüngliche $route auch nach bind() zurückgegeben.
  • In Router::prepareResponse() wird nach der Response-Konvertierung mit tap(..., fn (...) => event(...)) ein Event ausgelöst.
  • In Illuminate\Testing\Fluent\Concerns\Has unterstützt der Aufruf ->tap(...)->first(...)->etc() die Assertions.
Für sich genommen ist tap() ein kleiner Helper — in Kombination mit Macroable und Conditionable entstehen jedoch gut lesbare Method-Chains, wie man sie in Laravel häufig sieht.

Nächste Schritte

Macroable-Trait

Lernen Sie das Design kennen, mit dem Sie bestehende Klassen um eigene Methoden erweitern.

Conditionable-Trait

Lernen Sie Bedingungs-Chains mit when() / unless() kennen.
Zuletzt geändert am 13. Juli 2026