> On Apr 5, 2021, at 12:47 PM, Ben Ramsey <b...@benramsey.com> wrote:
> 
>> On Apr 5, 2021, at 11:40, André Hänsel <an...@webkr.de> wrote:
>> 
>> I was wondering... PHP is the only language I know of where you have to
>> write `(new Foo())->bar()` instead of
>> `new Foo()->bar()`. This is particularly apparent with the builder pattern:
>> 
>> $developer->drink((new Coffee())->withCream()->withSugar());
>> $logger->log((new LogMessage())->withMessage('Coffee was drunk'));
>> 
>> Since `new Foo()->bar()` cannot (and probably should not) be used to
>> "dynamically instantiate a new thing of the class
>> name returned by function Foo()", it seems like it would be no problem to
>> change the precedence rules so that
>> `new Foo()->bar()` means "instantiate a new Foo and call bar() on it".
>> 
>> It's currently a syntax error, so allowing it would be automatically
>> compatible.
>> 
>> Has this ever been discussed before?
> 
> 
> Mike Schinkel and I recently discussed this off-list. Mike, now’s your
> time to chime in with your ideas on this. :-)

Thanks for the invite.

I had asked Ben what he thought about allowing the following syntax as a 
synonym for `new Foo()`:

Foo::new()

That would be backward compatible because you currently cannot have a method 
named `new()`.

> My $0.02 is that this is unnecessary, but I can see how others might
> want it to avoid parenthesis soup.

Yes, off list Ben said he did not see the need for it, so I did not bring it up 
on the list.  

But now since he has invited me to... :-)

If we had such syntax then that would also Andre and others to use (and reduce 
the necessity of needing so many parens:

     Foo::new()->bar()

Thoughts?

-Mike

Reply via email to