Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:35743 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 75394 invoked by uid 1010); 23 Feb 2008 09:01:24 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 75379 invoked from network); 23 Feb 2008 09:01:24 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 23 Feb 2008 09:01:24 -0000 Authentication-Results: pb1.pair.com header.from=andrei@gravitonic.com; sender-id=unknown Authentication-Results: pb1.pair.com smtp.mail=andrei@gravitonic.com; spf=permerror; sender-id=unknown Received-SPF: error (pb1.pair.com: domain gravitonic.com from 204.11.219.139 cause and error) X-PHP-List-Original-Sender: andrei@gravitonic.com X-Host-Fingerprint: 204.11.219.139 mail.lerdorf.com Received: from [204.11.219.139] ([204.11.219.139:42343] helo=mail.lerdorf.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 7A/F3-30812-2E0EFB74 for ; Sat, 23 Feb 2008 04:01:23 -0500 Received: from [192.168.0.57] (LIS-DHCP-16.ulb.ac.be [164.15.95.140]) (authenticated bits=0) by mail.lerdorf.com (8.14.2/8.14.2/Debian-3) with ESMTP id m1N91DxA003100; Sat, 23 Feb 2008 01:01:15 -0800 In-Reply-To: <47B9B1B9.7060601@geminisbs.com> References: <47B9B1B9.7060601@geminisbs.com> Mime-Version: 1.0 (Apple Message framework v753) Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed Message-ID: <93D0D6BA-34AD-4A17-B474-91B251628EA5@gravitonic.com> Cc: KOYAMA Tetsuji , internals@lists.php.net Content-Transfer-Encoding: 7bit Date: Fri, 22 Feb 2008 10:00:11 -0800 To: Matvey Arye X-Mailer: Apple Mail (2.753) X-Virus-Scanned: ClamAV 0.92.1/5944/Fri Feb 22 22:44:58 2008 on colo.lerdorf.com X-Virus-Status: Clean Subject: Re: [PHP-DEV] [RFC] Anonymous functions From: andrei@gravitonic.com (Andrei Zmievski) 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 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: >>> >> // 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 : >>> >>>> 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