PHP7 will continue to borrow some of the beloved JavaScript features and will support Immediately Invoked Function Expressions (IIFEs):
<?php
echo (function() {
return 42;
})();
Output for php7@20140901 - 20141101: 42
Since we can already return functions from inside other functions, Currying Partial Application is also possible in combination with the IIFE implementation:
<?php
$foo = (function() {
return function($a) {
return $a + 42;
};
})();
echo $foo(10);
Output for php7@20140901 - 20141101: 52
Note that when accessing an outer variable from within a function, one – unlike in JavaScript which has closures – needs to use the use
keyword to make that variable accessible:
<?php
$foo = (function($a) {
return function($b) use ($a) {
return $a + $b;
};
})(42);
echo $foo(10);
Output for php7@20140901 - 20141101: 52
/me is excited!
PHP7 IIFE Demo →
PHP7 Currying Demo →
PHP7 Currying Redux Demo →
I was just trying to do this in PHP today and was a little sad finding out that you can’t. But I’m very glad to see these changes coming! (soon?)
<?php
call_user_func(function () {
echo ';)';
});
Bro good job. I can execute logical expression with your IIFE –
$a = [‘no’,’no’, ‘yes’, ‘np’, 787];
if (in_array(‘yes’, $a)) echo “hello”;
OR WITH YOUR IIFE –
in_array(‘yes’, $a) && call_user_func(function() {
echo “hello”;
});
This is great, PHP is heading in the right direction. However the example you give is not actual currying. A better term for it would be partial application. Currying is a more specific subset of that behavior. I found a great stackoverflow post that explains it well and saves me having to explain it, so here: http://stackoverflow.com/questions/218025/what-is-the-difference-between-currying-and-partial-application