Penso che sia sicuro affermare che la maggior parte delle applicazioni Web si basa sul paradigma richiesta / risposta. PHP non ha mai avuto un'astrazione formale di questi oggetti. Un gruppo sta cercando di cambiare questo: https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md
Tuttavia, hanno una sorta di tracciamento laterale sul problema dell'immutabilità. Da un lato, l'oggetto richiesta / risposta generalmente necessita di pochissime modifiche durante il suo ciclo di vita. D'altra parte, l'oggetto risposta in particolare ha spesso bisogno di aggiungere intestazioni HTTP.
Inoltre, l'immutabilità non ha mai veramente preso piede nella terra di PHP.
Quali vantaggi vedono le persone nell'uso di oggetti di richiesta / risposta immutabili?
Supponiamo che tu stia restituendo un oggetto json.
$response = new JsonResponse($item);
Bello e semplice. Ma risulta che la richiesta era una richiesta CORS (Cross-Origin Resource Sharing). Il codice che genera la risposta non dovrebbe interessare, ma da qualche parte a valle è un processo che aggiungerà le necessarie intestazioni Access-Control. Qualche vantaggio nel mantenere la risposta originale e crearne una nuova con le intestazioni aggiuntive? O è strettamente una questione di stile di programmazione.
L'oggetto richiesta è un po 'più interessante. Inizia allo stesso modo:
$request = new Request('incoming request information including uri and headers');
Le informazioni iniziali non devono essere modificate. Tuttavia, poiché la richiesta viene trasmessa, spesso è necessario aggiungere ulteriori informazioni di elaborazione. Ad esempio, potresti avere un URL matcher che decide quale azione deve essere eseguita per una determinata richiesta.
$request->setAttribute('action',function() {});
L'esecuzione effettiva dell'azione è responsabilità di un processo a valle. Potresti avere un RequestAttributesCollection mutevole che avvolge la richiesta immutabile ma che nella pratica tende a essere un po 'imbarazzante. Potresti anche avere una richiesta immutabile ad eccezione di una raccolta di attributi. Anche le eccezioni tendono a essere imbarazzanti. Qualche esperienza sulla gestione di questo tipo di requisiti?