Stanislav Malyshev wrote:
> Hi!
> 
> I wrote a small patch that enables this kind of syntax in PHP:
> 
> foo()();
> 
> What it means is that if foo() returns callable value (which probably
> should be function name or closure) then it would be called. Parameters
> and more than two sets of () work too.
> Of course, this is mostly useful for doing closures, and that was
> primary drive for implementing it - to make working with closures and
> especially function returning closures easier.
> What does not work currently is $foo->bar()() - since it is surprisingly
> hard to tell parser it's not {$foo->bar}()() - which of course is not
> what I want to do.
> 
> The patch is here: http://random-bits-of.info/funcfunc.diff
> 
> What do you think? If somebody has better idea btw - maybe make
> something like {foo()}() - and make that work for any expression inside
> {} - that might work too. So, what do you think?

I don't mind the foo()() syntax, especially now that we have closures.
But people are right, we have a longstanding feature request for
$foo()[0] as well, so if we start down this path of adding chaining, we
should do that one as well and see if any others make sense.

I do think the syntax is a bit ugly, but I also think it is clear what
it does and doesn't obscure/mislead the semantics of the call the way
the (new foo)->bar() suggestion does.

Not sure the {} expression syntax is needed.  What sort of expressions
do you see being useful here that would need the braces?  Stuff like
$a[$idx]() works today without needing any extra syntax.  Are you
thinking along the lines of:

{strtolower($a[$idx])}()

or something like that?  That would make the "I hate linefeeds and
semi-colons" crowd happy, I guess.

-Rasmus

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to