In addendum I'd like to correct the syntax that I had someone in IRC test.

Apparently it works as such:

$foo = NULL;
$foo = function($foo) use (&$foo) {
        ...
}

Still rather hackish, but better than globals I suppose?

Thanks,
Justin Martin

Justin Martin wrote:
> Hi Peter,
> 
> If I recall correctly, you can use the 'use' keyword.
> 
> $factorial = function($foo) use ($factorial) {
>       $factorial($foo);
> }
> 
> $factorial('Hello World!');
> 
> I'm still having issues compiling 5.3 on my system, so I haven't tested
> this.
> 
> Thanks,
> Justin Martin
> 
> Peter Danenberg wrote:
>> The original anonymous functions patch[1] contained support for
>> __FUNCTION__ as a recursion mechanism in closures, such that I should
>> be able to do something like this:
>>
>>   $factorial = function($n) {
>>       if ($n == 1)
>>         return 1;
>>       else
>>         return $n * call_user_func(__FUNCTION__, $n - 1);                    
>>                                                                              
>>          
>>     };
>>
>>   print $factorial(3);                  // => 6                              
>>                                                                             
>>
>> It fails with a warning, though:
>>
>>   Warning: call_user_func() expects parameter 1 to be a valid
>>   callback, function '{closure}' not found or invalid function name
>>
>> Is there another recursion mechanism for closures besides something
>> like the $GLOBALS['factorial'] hack?
>>
>> Footnotes: 
>> [1]  http://marc.info/?l=php-internals&m=119995982228453&w=2
>>

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

Reply via email to