12

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ですか?それの利点は何ですか?

私はそれを始めたという考えを本当に得ていません。

4

1 に答える 1