Я думаю, можно с уверенностью сказать, что большинство веб-приложений основаны на парадигме запрос / ответ. В PHP никогда не было формальной абстракции этих объектов. Одна группа пытается изменить это: https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md
Тем не менее, они в некотором роде отслеживаются в вопросе неизменности. С одной стороны, объект запроса / ответа обычно нуждается в очень небольшом изменении в течение своего жизненного цикла. С другой стороны, объекту ответа, в частности, часто требуется добавление заголовков HTTP.
Кроме того, неизменность никогда не завоевывала популярность в PHP.
Какие преимущества видят люди в использовании неизменяемых объектов запроса / ответа?
Предположим, вы возвращаете объект json.
$response = new JsonResponse($item);
Красиво и просто. Но оказывается, что запрос был запросом общего доступа к ресурсам (CORS). Код, который генерирует ответ, не должен заботиться, но где-то вниз по течению это процесс, который добавит необходимые заголовки Access-Control. Есть ли преимущество в сохранении исходного ответа и создании нового с дополнительными заголовками? Или это строго вопрос стиля программирования.
Объект запроса немного интереснее. Это начинается с того же:
$request = new Request('incoming request information including uri and headers');
Исходная информация не должна быть изменена. Однако, поскольку запрос get передается, часто возникает необходимость добавить дополнительную информацию для обработки. Например, у вас может быть средство сопоставления URL-адресов, которое решает, какое действие следует выполнить для данного запроса.
$request->setAttribute('action',function() {});
Фактически выполнение действия является обязанностью нисходящего процесса. Вы можете иметь изменяемый RequestAttributesCollection, который оборачивает неизменяемый запрос, но на практике это немного неловко. Вы также можете иметь запрос, который является неизменным, за исключением коллекции атрибутов. Исключения тоже бывают неловкими. Есть опыт работы с такими требованиями?