Hi, 2010/11/26 Felipe Pena <felipe...@gmail.com>
> 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. > Well, if this feature is going to be accept, we could to decide what syntax to use. I have created another patch which is the bracketed version of this presented here. <?php class foo { public $x = 1; } class bar { public $y = 'foo'; } $x = 'bar'; $bar = new bar; var_dump((new bar)->y); // foo var_dump((new $x)->y); // foo var_dump((new $bar->y)->x); // 1 ?> Thus we do not have the readability issues, as pointed by Johannes. http://wiki.php.net/rfc/instance-method-call (updated!) Thanks for the comments. -- Regards, Felipe Pena