Yes, let's re-open, I'd like to get a closure on that issue (pun intended).

-Andrei

On Feb 18, 2008, at 8:26 AM, Matvey Arye wrote:

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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]>:

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
 * [EMAIL PROTECTED]
 */

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




-
KOYAMA, Tetsuji
[EMAIL PROTECTED]



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

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

Reply via email to