首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么PSR-7反应的身体是可变的?

为什么PSR-7反应的身体是可变的?
EN

Stack Overflow用户
提问于 2020-09-08 12:45:39
回答 1查看 456关注 0票数 2

既然PSR-7响应应该是不可变的,为什么我可以写这个令人不安的“变异”代码呢?

代码语言:javascript
复制
public function controller(Response $response): Response
{
    $response->getBody()->write("Hey.");

    return $response;
}

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

这不是不一致吗?还是完全明智?我觉得挺奇怪的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-10 18:44:02

您的问题在PSR-7元中直接回答。

为什么流是可变的? StreamInterface API包含诸如write()之类的方法,这些方法可以更改消息内容--直接与具有不可变消息相矛盾。 出现问题的原因是,接口的目的是包装PHP流或类似的文件。因此,写操作将代理写入流。即使我们使StreamInterface不可变,一旦流被更新,任何封装该流的实例也将被更新--这使得不变性无法执行。 我们的建议是,实现对服务器端请求和客户端响应使用只读流。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63794247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档