RE: [PHP-DEV] function call chaining
| From: | Jared Williams | Date: | Tue, 19 Jan 2010 17:26:42 +0000 |
| Subject: | RE: [PHP-DEV] function call chaining | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-46814@lists.php.net to get a copy of this message | ||
> -----Original Message-----
> From: Stanislav Malyshev [mailto:stas@zend.com]
> Sent: 19 January 2010 00:28
> To: 'PHP Internals'
> Subject: [PHP-DEV] function call chaining
>
> 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?
> --
> Stanislav Malyshev, Zend Software Architect
> stas@zend.com http://www.zend.com/
> (408)253-8829 MSN: stas@zend.com
>
> --
> PHP Internals - PHP Runtime Development Mailing List To
> unsubscribe, visit: http://www.php.net/unsub.php
>
I've run into problems with
$foo[1]();
If the closure attempts to change the value of $foo[1] then PHP
complains.
So was forced to assign to a temporary variable before hand.
$f = $foo[1];
$f();
I guessing foo()() could also suffer from the problem?
Jared