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');
その後、4 つのコピーが作成されますが、最終的な結果$request
は、単純に を使用した場合と同じreturn $this
ですよね?
それを不変に保つという決定がなされたのはなぜですか。では、なぜ私はしなければならないのclone $this
ですか?それの利点は何ですか?
私はそれを始めたという考えを本当に得ていません。