> 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 <kocsismat...@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 -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php