Skip to main content

Wat zijn higher-order messages

Higher-order messages zijn een syntaxis waarmee je collectiemethodes aanroept in de vorm van property-toegang. Zonder een callback te schrijven kun je op elk element een methode aanroepen of een property ophalen.
$users->map->name betekent “haal van elke gebruiker de property name op en map daarover”.

Hoe het werkt — HigherOrderCollectionProxy

Wanneer je zoals bij $collection->map als property toegang zoekt, wordt __get() van de trait EnumeratesValues aangeroepen.
Als de naam voorkomt in $proxies, krijg je een instantie van HigherOrderCollectionProxy terug. Deze proxy houdt twee dingen bij: de collectie en de methodenaam.

Property-toegang via __get proxyen

Als je vervolgens een property benadert (->name), wordt __get() van de proxy aangeroepen.
Met andere woorden: $users->map->name is gelijk aan het volgende.

Methode-aanroepen via __call proxyen

Als je vervolgens een methode aanroept (->activate()), wordt __call() van de proxy aangeroepen.
$users->each->activate() is gelijk aan het volgende.

Overzicht van ondersteunde methodes

De methodes die je als higher-order message kunt gebruiken, zijn gedefinieerd in de array $proxies.
Een eigen methode toevoegen doe je met Collection::proxy().

Praktische use cases

Collecties van Eloquent-modellen

Higher-order messages zijn vooral handig bij Eloquent-collecties.

Filteren

Aggregatie

Groeperen en sorteren

Geneste structuren afvlakken met flatMap

Voorwaarden controleren

Stringcollecties

Ze werken ook op collecties waarvan de waarden strings zijn. De __call() van de proxy roept in het geval van een string de methode statisch aan.
Voor higher-order messages op stringcollecties moet de methode statisch gedefinieerd zijn op het stringtype. Normaal gesproken is het natuurlijker om ze te gebruiken met collecties van Eloquent-modellen of eigen klassen.

Vergelijking met gewone closures

Higher-order messages zijn beknopt, maar niet in alle gevallen bruikbaar.
Als je “van elk element dezelfde property wilt ophalen” of “op elk element dezelfde methode wilt aanroepen”, zijn higher-order messages beter leesbaar. Bij complexe voorwaarden of dynamische argumenten gebruik je closures.

Higher-order messages gebruiken met eigen klassen

Om via de trait EnumeratesValues het mechanisme van HigherOrderCollectionProxy te benutten, roep je Collection::proxy() aan om de methode toe te voegen aan de proxy-doelen.

Volgende stap

Conditionable-trait

Leer de interne implementatie van when() / unless() en hoe je die toepast op de Query Builder en eigen klassen.
Laatst gewijzigd op 6 september 2026