Re: [RFC] [DISCUSSION] Compact Object Property Assignment
| From: | Matthew Brown | Date: | Tue, 17 Mar 2020 21:33:38 +0000 |
| Subject: | Re: [RFC] [DISCUSSION] Compact Object Property Assignment | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-109115@lists.php.net to get a copy of this message | ||
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 <jakob@givoni.dk> wrote:
> On Mon, Mar 16, 2020 at 9:10 AM Matthew Brown <matthewmatthew@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
>