Re: [RFC] Anonymous functions

From: Date: Mon, 18 Feb 2008 16:26:33 +0000
Subject: Re: [RFC] Anonymous functions
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-35559@lists.php.net to get a copy of this message
Hi All, I second this. Can we please re-open the discussion on anonymous functions as well as closures. That would be an awesome feature. create_function is a bit ugly semantically to be sufficient for all anonymous function needs. Thanks, Mat KOYAMA Tetsuji wrote:
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


« previous php.internals (#35559) next »