我正在研究PSR-7接口并思考如何实现它们的方法。
我也一直在阅读这篇博文。显然,实现PSR-7
接口的对象必须是不可变的。
因此,如果我从那时起实现该withProtocolVersion
方法,MessageInterface
它将如下所示:
public function withProtocolVersion($version)
{
if ( $this->protocol === $version )
{
return $this;
}
$new = clone $this;
$new->protocol = $version;
return $new;
}
我的问题真的是,为什么不可变?为什么不简单地做一个return $this;
?
并不是我担心它分配的内存量,我只是真的看不出保持它不可变有什么好处。
就像博客文章说的那样,当你这样做时:
$request = $request
->withMethod('POST')
->withUrl(new Url('http://example.org/')
->withHeader('Content-Type', 'text/plain');
然后创建了四个副本,但最终结果$request
与我简单地使用时相同return $this
,对吗?
为什么决定让它保持不变。那么我为什么要做一个clone $this
?它有什么好处?
我并没有真正开始这个想法。