Re: Raising the precedence of the new operator

From: Date: Mon, 05 Apr 2021 20:52:53 +0000
Subject: Re: Raising the precedence of the new operator
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to internals+get-113970@lists.php.net to get a copy of this message
On Mon, Apr 5, 2021, 22:51 Marco Pivetta <ocramius@gmail.com> wrote: > > > On Mon, Apr 5, 2021, 19:42 Mike Schinkel <mike@newclarity.net> wrote: > >> >> > On Apr 5, 2021, at 12:47 PM, Ben Ramsey <ben@benramsey.com> wrote: >> > >> >> On Apr 5, 2021, at 11:40, André Hänsel <andre@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 > > Sorry, mails synchronized now, and I did not realize that you already had a waterfall of responses related to this :| >

« previous php.internals (#113970) next »