Je pense qu'il est sûr de dire que la plupart des applications Web sont basées sur le paradigme de demande / réponse. PHP n'a jamais eu d'abstraction formelle de ces objets. Un groupe essaie de changer cela: https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md
Cependant, ils ont en quelque sorte été mis de côté sur la question de l'immuabilité. D'une part, l'objet de demande / réponse nécessite généralement très peu de changement au cours de son cycle de vie. D'un autre côté, l'objet de réponse en particulier a souvent besoin d'ajouter des en-têtes HTTP.
De plus, l'immuabilité n'a jamais vraiment fait son chemin au pays de PHP.
Quels avantages les gens voient-ils à utiliser des objets de demande / réponse immuables?
Supposons que vous renvoyiez un objet json.
$response = new JsonResponse($item);
Agréable et simple. Mais il s'avère que la demande était une demande de partage de ressources d'origine croisée (CORS). Le code qui génère la réponse ne devrait pas se soucier mais quelque part en aval est un processus qui ajoutera les en-têtes de contrôle d'accès nécessaires. Un avantage à conserver la réponse d'origine et à en créer une nouvelle avec les en-têtes supplémentaires? Ou est-ce strictement une question de style de programmation.
L'objet de requête est un peu plus intéressant. Cela commence de la même façon:
$request = new Request('incoming request information including uri and headers');
Les informations initiales ne doivent pas être modifiées. Cependant, à mesure que la demande est transmise, il est souvent nécessaire d'ajouter des informations de traitement supplémentaires. Par exemple, vous pouvez avoir un adaptateur d'URL qui décide quelle action doit être exécutée pour une demande donnée.
$request->setAttribute('action',function() {});
L'exécution effective de l'action est la responsabilité d'un processus en aval. Vous pouvez avoir un RequestAttributesCollection modifiable qui encapsule la demande immuable mais qui a tendance à être un peu gênant dans la pratique. Vous pouvez également avoir une demande immuable, à l'exception d'une collection d'attributs. Les exceptions ont également tendance à être gênantes. Avez-vous une expérience dans la gestion de ce type d'exigences?