Re: [RFC] [Discussion] Clone with
| From: | Andreas Hennings | Date: | Tue, 18 Apr 2023 09:40:04 +0000 |
| Subject: | Re: [RFC] [Discussion] Clone with | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-120066@lists.php.net to get a copy of this message | ||
> The biggest advantage of Nicolas' proposal over “clone with” is that it could be made
> part of the interface contract whether a method modifies the object state. So the PSR-7
> ResponseInterface could look like the following:
> [..]
> public clone function withStatus($code, $reasonPhrase = '');
If this is the main argument, I think I would prefer a more general
"readonly" modifier on methods.
public readonly function withStatus($code, $reasonPhrase = ''): static;
> One cannot control whether $this should really be cloned: e.g. if a property should only be
> modified based on certain conditions (e.g. validation), the object would potentially be cloned in
> vain, resulting in a performance loss.
Exactly. I would say "conditionally clone", e.g. only clone if there
is a change, or if we don't already have a cached instance with this
value.
I think the "clone with" is much more flexible because we can call
this anywhere, not just in a dedicated method.
This said, I do agree with some of the benefits of the "Alternative" proposal.
-- Andreas
On Mon, 17 Apr 2023 at 08:32, Máté Kocsis <kocsismate90@gmail.com> wrote:
>
> Hi Everyone,
>
> Quite some time after mentioning the "clone with" construct the first time
> (at the end of the
>
> https://wiki.php.net/rfc/write_once_properties#run-time_behaviour
> section),
> finally I managed to create a working implementation for this feature which
> would make it possible to properly modify readonly properties
> while simplifying how we write "wither" methods:
> https://wiki.php.net/rfc/clone_with
>
> Regards,
> Máté Kocsis