[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-internals
Subject:    Re: [PHP-DEV] [RFC] Anonymous functions
From:       "KOYAMA Tetsuji" <koyama () hoge ! org>
Date:       2008-01-29 18:26:21
Message-ID: bac8aeab0801291026r40a6b304ud0afba0c47113a37 () mail ! gmail ! com
[Download RAW message or body]

Hi lists,

Is this discussion stopping?

I want this feature in PHP. Please start to talk.

On Jan 10, 2008 7:09 PM, Ryusuke SEKIYAMA <rsky0711@gmail.com> wrote:
> Hello, lists,
>
> We have discussed about implementing anonymous functions and
> closures in PHP.
> However, I consider that implementing anonymous functions and
> implementing lexical scopes should be discussed separately.
> # Even though I like closure. ;-)
> So I wrote anonymous function patch for PHP 5.3 and 6.0.
>
>
> Patches (inlcude tests):
> for PHP 5.3: http://www.opendogs.org/pub/php-5.3dev-080109-anon.patch
> for PHP 6.0: http://www.opendogs.org/pub/php-6.0dev-080109-anon.patch
>
>
> Featues:
> - Unlike create_function(), there is no need to take care of
>  quotes, backslashes and dollars .
> - Can be used in loop, but be compiled only once.
> - Supports recursive call using __FUNCTION__.
> - Supports inline execution. It works like a block scope.
> - Works with opcode caches.
>  Since I couldn't build APC against PHP 5.3, I have tested
>  PHP 5.2.5 + anonymous function patch and APC 3.0.16.
>
>
> Example:
> <?php
> // callback
> $arr = array(5, 3, 6, 0);
> usort($arr, function($a, $b){ return $a - $b; });
> print_r($arr); // 0, 3, 5, 6
>
> // assign to a variable
> $lambda = function(){
>  echo "Hello, World!\n";
> };
> $lambda(); // "Hello, World!"
>
> // inline execution
> $result = function($a, $b){
>  return $a + $b;
> }(1, 2);
> var_dump($result); // "int(3)"
> ?>
>
>
> The anonymous function name is composed of '\0', "ZEND_ANON<#serial>",
> filename and character position.
> - Leading '\0' blocks to be displayed by get_defined_functions().
> - "ZEND_ANON<" helps determine wheter the function is anonymous or not
>  because '<' cannot be used for user-defined function name.
> - Serial number and file informations make the name unique.
> - char anon_key_buf[32] is long enough because
>  `snprintf(anon_key_buf, 32, "ZEND_ANON<%llu>", (unsigned long
> long)UINT64_MAX)'
>  returns 31.
>
>
> Regards,
>
>
> 2008/1/6, Marcus Boerger <helly@php.net>:
> > Hello Stanislav,
> >
> >   tha makesw three then already, how about we ask around again?
> > Ryusuke, can you please start a new '[RFC] Square brackets shortcut' thread
> > to collect opinions and pass along the patch for that?
> >
> > I like the anonymous function patch too. It is clean and simple. Maybe you
> > want to start a second '[RFC] Anonymous functions' thread with that patch.
> >
> > Can you also please add tests for both?
> >
> > marcus
> >
> > Wednesday, January 2, 2008, 7:51:06 PM, you wrote:
> >
> > >> the square bracket array syntax patch for PHP 5.3,
> > >>   http://www.opendogs.org/pub/php-5.3dev-080101-sbar.patch
> >
> > > I remember we discussed that already and it was rejected then (even
> > > though myself and Andi liked it) - did the people that objected then
> > > change their minds?
> >
> >
> >
> > Best regards,
> >  Marcus
> >
> >
>
>
> --
> /**
>  * Ryusuke SEKIYAMA
>  * rsky0711@gmail.com
>  */
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

-
KOYAMA, Tetsuji
koyama@hoge.org

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

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic