为什么PSR-7响应的主体是可变的

  • 本文关键字:主体 响应 PSR-7 php psr-7
  • 更新时间 :
  • 英文 :


既然PSR-7响应应该是不可变的,我为什么要写这个令人不安的"突变";一段代码?

public function controller(Response $response): Response
{
$response->getBody()->write("Hey.");
return $response;
}

在我看来,虽然响应本身是不可变的,这意味着我们在调用$response->withHeader(…)时会得到一个新对象,但我们仍然可以(通常也会(更改其Body对象(不是响应中最不重要的部分(。

这不是前后矛盾吗?还是完全合理?我觉得这很奇怪。

您的问题在PSR-7:的元中直接得到回答

为什么流是可变的
StreamInterface API包括write((等方法,这些方法可以更改消息内容,这与不可变消息直接矛盾。

出现的问题是由于接口旨在包装PHP流或类似内容。因此,写入操作将代理写入流。即使我们使StreamInterface不可变,一旦流被更新,任何封装该流的实例也将被更新——这使得不可变性无法强制执行。

我们建议实现对服务器端请求和客户端响应使用只读流。

最新更新