On Wed, May 21, 2025 at 23:27 Larry Garfield wrote: > On Wed, May 21, 2025, at 9:13 AM, Tim Düsterhus wrote: >> Am 2025-05-19 12:48, schrieb Volker Dusch: >>> We're still looking for feedback on the ...variadic approach to the >>> Syntax: >>> https://wiki.php.net/rfc/clone_with_v2#open_issues, as we only got one >>> reply so far on the topic. >> >> ... >> *Some* property name being completely incompatible with “clone with” (no >> matter how the first parameter is going to be called) is a limitation >> that should not exist, it feels like a feature that is broken by design >> and I think I really would hate it if the documentation of this RFC >> would need a “Caution: It is not possible to reassign a property called >> '$object', due to a parameter name conflict”. > > I completely disagree here. The __ prefix is sufficient to solve the issue. > A double underscore prefix has been understood to mean "internal to PHP, magic > here" for at least 20 years. The chances of someone having a property called > $__object are virtually nil, and if they do, they're already treading on > naming > that's reserved for PHP's use anyway so if it breaks, it's their own fault.
Is the __ prefix part of the current proposal? Currently the RFC examples have the parameter name as simply `$object`. Even if the parameter is renamed to `$__object`, there would still have to be a warning in the docs that it isn't possible to use the function to set a property named `__object`, which I agree with Tim is a limitation that should not exist. For people who want to consistently use named arguments for all parameters, (rather than all parameters except the first one) the code would look like: $obj = clone( __object: $this, foo: 'bar', object: $baz, ); Is this API really better than with a simple array parameter? $obj = clone($this, [ 'foo' => 'bar', 'object' => $baz, ]); Using an array results in fewer lines of code, and the distinction between the object being cloned and the properties being set is much clearer. I get that it may be annoying to quote array keys, but to me this is not as bad as the confusing variadic API. In the future PHP could get a simpler array syntax like `[foo: 'bar']`, which would benefit far more functions than only `clone()`. Kind regards, Theodore