Re: Allow combining arg unpacking and named args

From: Date: Tue, 25 May 2021 14:43:12 +0000
Subject: Re: Allow combining arg unpacking and named args
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-114593@lists.php.net to get a copy of this message
On Tue, May 25, 2021 at 4:36 PM Levi Morrison <levi.morrison@datadoghq.com> wrote: > On Tue, May 25, 2021 at 8:18 AM Nikita Popov <nikita.ppv@gmail.com> wrote: > > > > Hi internals, > > > > Currently, argument unpacking (...$foo) cannot be combined with named > > arguments (foo: $bar) at all. Both func(...$args, x: $y) and func(x: $y, > > ...$args) are rejected by the compiler. > > > > https://github.com/php/php-src/pull/7009 relaxes this by > > allowing > > func(...$args, x: $y). The named arguments are required to come last, > > because this automatically enforces the invariant that named arguments > must > > be sorted after positional argument. > > > > Are there any concerns with relaxing this restriction? > > > > Regards, > > Nikita > > How do named parameters interact with the variadic parameter? > > function f(...$params) { var_dump($params); } > $args = [1, 2, 3]; > f(...$args, params: [4, 5, 6]); > Ah, I think I should have mentioned that the proposed change doesn't actually allow you to do anything new or different -- it only removes an arbitrary syntactical limitation. In particular func(...$args, x: $y) will behave the same as func(...[...$args, 'x' => $y]); with the only difference that if $args already contained an 'x' key, that would be an error, instead of silently ignored. So to answer your question: Variadic parameters are not targetable by named parameters, so what you wrote will pass [1, 2, 3, 'params' => [4, 5, 6]] as usual. Regards, Nikita

« previous php.internals (#114593) next »