Re: [RFC] [Discussion] Clone with

From: Date: Fri, 09 Jun 2023 05:34:34 +0000
Subject: Re: [RFC] [Discussion] Clone with
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-120549@lists.php.net to get a copy of this message
> On 9 Jun 2023, at 07:11, Larry Garfield <larry@garfieldtech.com> wrote: > > On Thu, Jun 8, 2023, at 5:39 PM, Stephen Reay wrote: > >> Is there a specific reason clone with (foo: $bar); can’t >> simply pass >> the arguments given to with(), to the __clone() magic method? >> >> It leaves the developer free to use the passed argument(s) or deep >> clone existing properties or a mix depending on what’s passed, and >> seems like it has the least “magic” or unknown behaviour in terms of >> when things happen. >> >> Just a thought. > > I experimented with that a few years back. The results showed it is actually pretty awful in > practice. > > ): µ>d› > u63ëhttps://peakd.com/hive-168588/@crell/object-properties-part-2-examples > > --Larry Garfield > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: https://www.php.net/unsub.php > Hi Larry Sure, that example __clone() isn’t exactly what I’d call short-and-sweet, but it absolutely solves the problem of: “what happens, in which order, when you do clone ($foo) with (bar: ‘baz’, moo: ‘foo’); on an object with a __clone() method. There is zero ambiguity there because it’s expressed in php the developer can see/debug/trace. Also, consider that for classes that have no nullable properties, the __clone method could be a lot simpler than your example shows, e.g.: function __clone(?string $bar = null, ?int $baz = null, ?ComplexObj $foo = null) { $this->bar = $bar ?? $this->bar; $this->baz = $baz ?? $this->baz; $this->foo = $foo ?? clone ($this->foo); } If the property hooks RFC had already passed a vote, I’d suggest that some expansion of hooks could provide a cleaner solution here, but it hasn’t yet (and I understand it’s not desirable to tie the fate of one RFC to another so heavily) so here we are. Cheers Stephen

« previous php.internals (#120549) next »