This RFC allows to omit parentheses around the new expression when constructor arguments' parentheses are present.
$highlighter = (new Highlighter())->withGutter(); $highlighter = new Highlighter()->withGutter();
It also works with accessing properties, constants, etc.
new MyClass()::CONSTANT; new MyClass()::$staticProperty; new MyClass()::staticMethod(); new MyClass()->property; new MyClass()->method(); new MyClass()();
Often, I add static methods to some classes in order to improve readability when I instantiate a new class; the ability of chaining methods directly to the constructor, without the unnecessary parenthesis boilerplate, would remove the need for that.
Every time I find myself typing new MyClass()
and than returning back and adding those parentheses. It would be good to reduce this friction and make PHP coding flow smoother.
I don't think removing parenthese is a good idea
Cleaner code
this allows for cleaner code. less verbose.
makes for cleaner code by removing those useless parentheses
Maybe that method should be static...
As a general user with no actual knowledge of the internals of PHP I cannot foresee any challenges. However, I feel this could be a useful addition to the language itself. There are a lot of times where I've seen code (new MyClass)->method()
which always felt a bit unnecessary.
One thing that feels kinda weird now is the static method part. My question with that one is, will the old behaviour still work?
Example: MyClass::staticMethod()
?
I am interested to learn what the community thinks of the change and how they view it.
JavaScript has this, and I've never found the lack of parentheses confusing there. If anything, I think the currently-required wrapper parentheses in PHP add cognitive load when parsing out a statement.
It is very annoying to wrap new class into parentheses.
Yeah finally. its necessary
This syntax, will make the code more readable, clean.
This is very clean
I love it, it's cleaner
It is really confusing to read since having the space breaks the way PHP handles spaces in all other places. It is incoherent.
The "pipe operator" |>
allows you to chain multiple function calls in a more convenient way.
This RFC proposes a way to have multi-line short closures — closures that don't need explicit use
statements, but can still have multiple lines and a return statement.