> I think a possible improvement might be a generalised syntax, similar to > that used for constants, that lets you use any \Closure object to define a > function or method. Thus: > > function reduce = $initial ~> $fn ~> $input ~> { > // ... > };
I like this but we're getting a bit too far in the future RFC territory. But bringing this back to the current proposal I think that the curly brace syntax should stay. I much prefer this: function reduce = $initial ~> $fn ~> $input ~> { $accumulator = $initial; foreach ($input as $value) { $accumulator = $fn($accumulator, $value); } return $accumulator; }; To this: function reduce = $initial ~> $fn ~> function($input) use($initial, $fn) { $accumulator = $initial; foreach ($input as $value) { $accumulator = $fn($accumulator, $value); } return $accumulator; }; So while assigning the result to a named function (instead of a variable) is out of scope of this RFC I think it demonstrates the value of the block syntax which I think we should keep. I've said this several times now, so I won't say it again :) > This has that advantage that it isn't just useful for when you want to use > the short syntax. You can also use it when you're obtaining a Closure in > some novel way, perhaps a higher-order function: > > // where "add" is a function that adds two numbers > function sum = reduce(0)("add"); > > With this, you don't have to write a wrapper function, or use a global > variable, to define a proper top-level function. I like this as well but again we're getting a bit too far away from the current proposal. -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php