Ich denke, man kann mit Sicherheit sagen, dass die meisten Webanwendungen auf dem Anforderungs- / Antwortparadigma basieren. PHP hatte noch nie eine formale Abstraktion dieser Objekte. Eine Gruppe versucht dies zu ändern: https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md
In der Frage der Unveränderlichkeit wurden sie jedoch irgendwie von der Seite verfolgt. Einerseits muss das Anforderungs- / Antwortobjekt während seines Lebenszyklus im Allgemeinen nur sehr wenig geändert werden. Andererseits müssen insbesondere für das Antwortobjekt häufig HTTP-Header hinzugefügt werden.
Darüber hinaus hat sich die Unveränderlichkeit im Land der PHP nie wirklich durchgesetzt.
Welche Vorteile sehen Menschen bei der Verwendung unveränderlicher Anforderungs- / Antwortobjekte?
Angenommen, Sie geben ein JSON-Objekt zurück.
$response = new JsonResponse($item);
Schön und einfach. Es stellt sich jedoch heraus, dass es sich bei der Anforderung um eine CORS-Anforderung (Cross-Origin Resource Sharing) handelte. Der Code, der die Antwort generiert, sollte sich nicht darum kümmern, aber irgendwo stromabwärts ist ein Prozess, der die erforderlichen Access-Control-Header hinzufügt. Gibt es einen Vorteil, wenn Sie die ursprüngliche Antwort beibehalten und eine neue mit den zusätzlichen Headern erstellen? Oder ist es nur eine Frage des Programmierstils?
Das Request-Objekt ist etwas interessanter. Es beginnt genauso:
$request = new Request('incoming request information including uri and headers');
Die Anfangsinformationen sollten nicht geändert werden müssen. Wenn die Anforderung weitergeleitet wird, müssen jedoch häufig zusätzliche Verarbeitungsinformationen hinzugefügt werden. Beispielsweise haben Sie möglicherweise einen URL-Matcher, der entscheidet, welche Aktion für eine bestimmte Anforderung ausgeführt werden soll.
$request->setAttribute('action',function() {});
Die eigentliche Ausführung der Aktion liegt in der Verantwortung eines nachgeschalteten Prozesses. Sie könnten eine veränderbare RequestAttributesCollection haben, die die unveränderliche Anfrage umschließt, aber das ist in der Praxis etwas umständlich. Sie könnten auch eine Anfrage haben, die bis auf eine Attributsammlung unveränderlich ist. Ausnahmen sind ebenfalls umständlich. Erfahrungen im Umgang mit solchen Anforderungen?