Eu acho que é seguro dizer que a maioria dos aplicativos da Web é baseada no paradigma de solicitação / resposta. O PHP nunca teve uma abstração formal desses objetos. Um grupo está tentando mudar isso: https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md
No entanto, eles meio que ficaram de fora da questão da imutabilidade. Por um lado, o objeto de solicitação / resposta geralmente precisa de muito pouca mudança durante seu ciclo de vida. Por outro lado, o objeto de resposta em particular geralmente precisa que cabeçalhos HTTP sejam adicionados.
Além disso, a imutabilidade nunca realmente pegou na terra do PHP.
Que vantagens as pessoas vêem no uso de objetos imutáveis de solicitação / resposta?
Vamos supor que você esteja retornando um objeto json.
$response = new JsonResponse($item);
Agradável e simples. Mas acontece que a solicitação era uma solicitação de compartilhamento de recursos de origem cruzada (CORS). O código que gera a resposta não deve se importar, mas em algum ponto a jusante é um processo que adicionará os cabeçalhos de controle de acesso necessários. Alguma vantagem em manter a resposta original e criar uma nova com os cabeçalhos adicionais? Ou é estritamente uma questão de estilo de programação.
O objeto de solicitação é um pouco mais interessante. Começa da mesma forma:
$request = new Request('incoming request information including uri and headers');
As informações iniciais não precisam ser alteradas. No entanto, à medida que a solicitação é transmitida, geralmente é necessário adicionar informações de processamento adicionais. Por exemplo, você pode ter um correspondente de URL que decide qual ação deve ser executada para uma determinada solicitação.
$request->setAttribute('action',function() {});
A execução real da ação é de responsabilidade de um processo de downstream. Você pode ter um RequestAttributesCollection mutável que agrupa a solicitação imutável, mas que na prática costuma ser um pouco estranho. Você também pode ter uma solicitação imutável, exceto por uma coleção de atributos. Exceções também tendem a ser estranhas. Alguma experiência em lidar com esses tipos de requisitos?