I don't think it's conflicting _if you insist on brackets_ after the new
expression. PHP Parser grammar for "new" expressions is

T_NEW class_name_reference ctor_arguments

If you allowed the shorter syntax, ctor_arguments would allow an
object_properties entry.

I'm sure Nikita could clarify, though.


On Mon, 16 Mar 2020 at 21:13, Jakob Givoni <ja...@givoni.dk> wrote:

> On Mon, Mar 16, 2020 at 9:10 AM Matthew Brown <matthewmatt...@gmail.com>
> wrote:
> > I love the idea!
> Thanks Matthew!
>
> > The syntax for new objects looks a little verbose – would it be possible
> to use
> >
> > $foo = new Foo()[
> >   property1 = "hello",
> >   property2 = 5,
> > ];
> The short answer: I don't think so.
>
> This is not possible (though it's arguably 'nicer'):
>
> new Foo()->doSomething(); // syntax error, unexpected '->'
>
> Not sure why, but it's necessary to wrap the instantiation in brackets:
>
> (new Foo())->doSomething(); // Ok
>
> If someone can explain why, it would be enlightening!
>
> Furthermore, dropping the arrow would create conflicting syntax with
> array access:
>
> $foo[1]; // Array access, give me the element with index 1, can be
> used on objects as well
> $foo[a = 1]; // Property assignment... ???
>
> I'll update the RFC to reflect your proposal.
>
> Thank you,
> Jakob
>

Reply via email to