On Mon, Apr 5, 2021, 19:42 Mike Schinkel <m...@newclarity.net> wrote:

>
> > 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()`.
>

I have static ctors named `new` in multiple codebases:
https://3v4l.org/FudWpk

>

Reply via email to