Skip to main content

Scopo di questa pagina

Questa pagina non spiega come usare collect(): fornisce una mappa per leggere il codice di implementazione del core di Laravel. Il pubblico è chi conosce già l’elenco dei metodi di Collection e vuole ora capire “perché questo design”.

Evoluzione storica

La struttura di Collection è stata riorganizzata in modo significativo con l’introduzione di LazyCollection.

Fino a Laravel 5.8

  • Illuminate\Support\Collection
  • Illuminate\Database\Eloquent\Collection (estende Collection)
A questo punto non esistono LazyCollection, Enumerable e EnumeratesValues.

Modifiche in Laravel 6.0

In concomitanza con l’aggiunta di LazyCollection, l’API comune è stata separata in Enumerable (interfaccia) ed EnumeratesValues (trait).

Struttura complessiva attuale (Laravel 13)

Riferimento: laravel/framework v13.x
Attualmente il path fisico dei file è src/Illuminate/Collections/*, ma il namespace resta Illuminate\\Support. Quando leggi il codice, tieni distinti “path” e “namespace”.

Generics stile PHPDoc / PHPStan

PHP di per sé non ha i generics. Nonostante ciò, attorno a Collection si esprime un’informazione di tipo forte tramite PHPDoc. Ci sono due obiettivi principali.
  • Ottenere un autocompletamento accurato nell’IDE
  • Aumentare la precisione di analizzatori statici come PHPStan / Larastan

Notazioni ricorrenti

Come appare nella Collection di Eloquent

TValue viene specializzato in TModel, quindi l’inferenza di tipo di map(), filter() e simili risulta più orientata ai modelli Eloquent.

Ordine con cui leggere l’implementazione

1. Parti da Enumerable come punto d’ingresso

Prima di tutto, cattura “qual è il contract che offre”. Se qui memorizzi l’elenco dei metodi, la successiva lettura dell’implementazione sarà più veloce.

2. Segui i metodi comuni in EnumeratesValues

Gran parte della logica comune — map, filter, reduce — vive qui. Se poi guardi solo le differenze tra Collection e LazyCollection, salterai meno passaggi.

3. Osserva le differenze tra Collection e LazyCollection

  • Collection: valutazione immediata mantenendo un array
  • LazyCollection: valutazione pigra usando Generator
Anche a parità di nome del metodo cambiano il tempo di valutazione e le caratteristiche di memoria.

4. Da ultimo leggi Eloquent\Collection

Concentrati sulle estensioni per insiemi di modelli come find, load, modelKeys. Se prima capisci la Collection di base, le intenzioni saranno più chiare.
Per approfondire un singolo metodo, segui l’ordine: dichiarazione in Enumerable → corpo in EnumeratesValues → eventuali override in Collection / LazyCollection. Non ti perderai.

Pagine correlate

Ultima modifica il 13 luglio 2026