2010/11/26 Johannes Schlüter <johan...@schlueters.de> > On Fri, 2010-11-26 at 17:36 -0200, Felipe Pena wrote: > > var_dump(new foo()->bar()->x); // string(3) "PHP" > > It has some readability issues. One might assume it is > > new (foo()->bar()->x) > > not > > (new foo())->bar()->x > > As there is a mandatory space between "new" and its operand and no space > in front of the object operator and we allow non-constant operands to > "new". > > So what is > > new $bar->foo(); > > ? If I read the patch correctly this is valid and evaluated as > > (new $bar)->foo(); > > johannes > >
new foo()->bar() should be read as: (new foo())->bar(). And using variable: new $bar->y()->x should be read as: (new ($bar->y)())->x. <?php class foo { public $x = 1; } class bar { public $y = 'foo'; } $bar = new bar; var_dump(new $bar->y()->x); // 1 ?> I.e. just as it is nowdays. -- Regards, Felipe Pena