Myślę, że można bezpiecznie powiedzieć, że większość aplikacji internetowych opiera się na paradygmacie żądanie / odpowiedź. PHP nigdy nie miało formalnej abstrakcji tych obiektów. Jedna grupa próbuje to zmienić: https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md
W pewnym sensie udało im się jednak śledzić kwestię niezmienności. Z jednej strony obiekt zapytania / odpowiedzi zazwyczaj wymaga bardzo niewielkich zmian w trakcie swojego cyklu życia. Z drugiej strony, w szczególności obiekt odpowiedzi często wymaga dodania nagłówków HTTP.
Co więcej, niezmienność nigdy tak naprawdę nie przyjęła się w krainie PHP.
Jakie korzyści widzą ludzie, używając niezmiennych obiektów zapytania / odpowiedzi?
Załóżmy, że zwracasz obiekt Json.
$response = new JsonResponse($item);
Ładne i proste. Okazuje się jednak, że żądanie było żądaniem CORS (Cross-Origin Resource Sharing). Kod generujący odpowiedź nie powinien się przejmować, ale gdzieś poniżej znajduje się proces, który doda niezbędne nagłówki kontroli dostępu. Czy jest jakaś korzyść z zachowania oryginalnej odpowiedzi i utworzenia nowej z dodatkowymi nagłówkami? Czy jest to ściśle kwestia stylu programowania.
Obiekt żądania jest nieco bardziej interesujący. Zaczyna się tak samo:
$request = new Request('incoming request information including uri and headers');
Wstępnych informacji nie trzeba zmieniać. Ponieważ jednak żądanie zostaje przekazane, często konieczne jest dodanie dodatkowych informacji o przetwarzaniu. Na przykład możesz mieć dopasowujący adres URL, który decyduje o tym, jaka akcja powinna zostać wykonana dla danego żądania.
$request->setAttribute('action',function() {});
Właściwie wykonanie akcji jest obowiązkiem dalszego procesu. Możesz mieć zmienną RequestAttributesCollection, która otacza niezmienne żądanie, ale w praktyce jest to nieco niezręczne. Możesz również mieć żądanie, które jest niezmienne, z wyjątkiem kolekcji atrybutów. Wyjątki są również niewygodne. Jakieś doświadczenie w radzeniu sobie z tego rodzaju wymaganiami?