On Tue, May 25, 2021 at 4:36 PM Levi Morrison <levi.morri...@datadoghq.com>
wrote:

> On Tue, May 25, 2021 at 8:18 AM Nikita Popov <nikita....@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

Reply via email to