> 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