В PHP 8.5 наконец-то будет clone with!

Как-то незаметно в PHP 8.5 приняли долгожданный RFC https://wiki.php.net/rfc/clone_with_v2.

1. Клонирование теперь не только языковая конструкция, но и функция clone(object $object, array $withProperties = []): object. Благодаря этому можно писать array_map(clone(...), $myObjects).

2. Вторым аргументом можно передать новые значения свойств для склонированного экземпляра. Переопределить можно любые видимые в текущей области свойства, в том числе readonly, что наконец-то даёт нам полный инструментарий для работы с иммутабельными структурами:

`final readonly class Request { public function __construct( public string $path = '', public array $headers = [], ) {}

public function withPath(string $path): self { return clone($this, ['path' => $path]); }

public function withHeader(string $name, string $value): self { return clone($this, ['headers' => [ ...$this->headers, $name => $value, ]]); } }

new Request() ->withPath('/phpyh') ->withHeader('Content-Type', 'application/json');

Почему это важная фича и как без неё обходиться прямо сейчас, подробно рассказал Brent Roose в ролике 📹 Cloning Readonly Classes in PHP 8.2. ____________ До конца завтрашнего дня билеты на Пых.конф’25 всего по 12 000 рублей!`