PHP 7: Immediately Invoked Function Expressions

php-logo

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 [email protected] - 20141101:
42

Currying (functions returning functions) is also possible in combination with the IIFE implementation:

<?php

$foo = (function() {
    return function($a) {
        return $a + 42;
    };
})();

echo $foo(10);
Output for [email protected] - 20141101:
52

Note that when accessing an outer variable from within a function (aka “inheriting variables from outer scope”), one – unlike in JavaScript – 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 [email protected] - 20141101:
52

/me is excited!

PHP7 IIFE Demo →
PHP7 Currying Demo →
PHP7 Currying Redux Demo →

Join the Conversation

5 Comments

  1. 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?)

      1. 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”;
        });

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.