Creo que es seguro decir que la mayoría de las aplicaciones web se basan en el paradigma de solicitud / respuesta. PHP nunca ha tenido una abstracción formal de estos objetos. Un grupo está tratando de cambiar esto: https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md
Sin embargo, de alguna manera fueron rastreados en el tema de la inmutabilidad. Por un lado, el objeto de solicitud / respuesta generalmente necesita muy pocos cambios durante su ciclo de vida. Por otro lado, el objeto de respuesta en particular a menudo necesita que se agreguen encabezados HTTP.
Además, la inmutabilidad nunca ha tenido éxito en la tierra de PHP.
¿Qué ventajas ve la gente al usar objetos de solicitud / respuesta inmutables?
Supongamos que está devolviendo un objeto json.
$response = new JsonResponse($item);
Agradable y simple Pero resulta que la solicitud era una solicitud de Intercambio de recursos de origen cruzado (CORS). El código que genera la respuesta no debería importarle, pero en algún lugar posterior es un proceso que agregará los encabezados de control de acceso necesarios. ¿Alguna ventaja de mantener la respuesta original y crear una nueva con los encabezados adicionales? ¿O es estrictamente una cuestión de estilo de programación?
El objeto de solicitud es un poco más interesante. Comienza igual:
$request = new Request('incoming request information including uri and headers');
La información inicial no debería necesitar ser cambiada. Sin embargo, a medida que se pasa la solicitud, a menudo es necesario agregar información de procesamiento adicional. Por ejemplo, puede tener un url matcher que decida qué acción se debe ejecutar para una solicitud determinada.
$request->setAttribute('action',function() {});
En realidad, ejecutar la acción es responsabilidad de un proceso descendente. Podría tener una RequestAttributesCollection mutable que envuelve la solicitud inmutable pero que tiende a ser un poco incómoda en la práctica. También podría tener una solicitud que sea inmutable, excepto para una colección de atributos. Las excepciones también tienden a ser incómodas. ¿Alguna experiencia en el manejo de este tipo de requisitos?