As you might have seen in the title, my programming background is Java. In Java you can do stuff like this
new Object().callSomeMethod();
without assigning the created Object to a variable, very useful and clear coding if you only need this Object once.
Now in PHP i try to do the same
new Object()->callSomeMethod();
but here i get a 'Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR)'.
Is there a way to do this in PHP ?
(new Object())->callSomeMethod();
will work in PHP 5.4+
EDIT
It is a new feature added on PHP 5.4:
Class member access on instantiation has been added, e.g.
(new Foo)->bar()
.
EDIT2
The PHP feature RFC proposes two sets of syntax(with & without brackets), both of them are implemented in the RFC, but only one has been shipped. I couldn't find links explaining the decision.
Let's take a look at the bracketless syntax examples in the RFC:
new foo->bar()
should be read as (new foo)->bar()
new $foo()->bar
should be read as (new $foo())->bar
new $bar->y()->x
should be read as (new ($bar->y)())->x
I think bracketless syntax is not shipped because its proposed parsing precedence is not very intuitive(hard to follow by eyes) as shown in the 3rd example.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With