Reputation: 1439
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 ?
Upvotes: 9
Views: 4794
Reputation: 2634
(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.
Upvotes: 20