Я смотрю на интерфейсы 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
? Какая от этого польза?
Я не совсем понимаю, почему это началось.