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 >