I really like the proposal and it's definitely improving more common modern use cases.
However, I understand why the precedence is like that now in PHP to begin with and so I think this should target PHP 8. This change would be a bit similar to other weird use cases of variables which were changed with PHP 7. Best, Harry On Thu, 8 Feb 2018 at 20:45 Mcmuffin Mcguffin <mcmuffinmcguf...@gmail.com> wrote: > Hi, > > It's a common idiom in object-oriented languages to create an object and > then immediately call a method on it, such as (in C# or Java): > > new DateTime ().ToString () > > However, PHP grammar does not work this way. You have to put an additional > round of parentheses around new clause, such as: > > (new DateTime ())->format ('Y-m-d') > > This is rather clunky for such a common scenario (you usually have to walk > all the way back to the beginning of the expression to fix it). I have a > pattern of using static factories in place of constructor just to avoid > extra parentheses. Besides, the issue is relatively easy to fix. I've done > and tested a change for grammar in this area. It's a slight adjustment to > definition of dereferencable: > > dereferencable: > > variable { $$ = $1; } > > | '(' expr ')' { $$ = $2; } > > * | new_expr { $$ = $1; }* > > | dereferencable_scalar { $$ = $1; } > > ; > > > > There was a problem with shift/reduces though. PHP has a level of > complexity in new expression which other languages don't. It's variable > class instantiation, such as: > > new $class (arguments) > > Expressions in place of $class can be rather complex, though I don't think > they really need to be. For example, such stuff is allowed: > > new $var[0]->prop (arguments) > > — which seems redundant and confusing. My fix to the problem was to force > parentheses around complex expressions such as above: > > new ($var[0]->prop) (arguments) > > — while keeping simple cases of "new $class (arguments)" without change. > Yes, this moves parentheses from one place to another (and occasionally > breaks the old code) but frequency wise I think it's an improvement. > > What do you think? > > Jaroslav Wegner > -- Haralan Dobrev CTO @ Clippings.com https://hkdobrev.com