Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Call function directly after constructor: new Object()->callFunction()

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 ?

like image 606
Basti Funck Avatar asked Sep 18 '13 13:09

Basti Funck


1 Answers

(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.

like image 134
Kita Avatar answered Oct 21 '22 16:10

Kita