I was trying to borrow some programing paradigms from JS to PHP (just for fun). Is there a way of doing:

$a = (function(){
  return 'a';
})();

I was thinking that with the combination of use this can be a nice way to hide variables JS style

$a = (function(){
    $hidden = 'a';
    return function($new) use (&$hidden){
        $hidden = $new;
        return $hidden;
    };
})();

right now I need to do:

$temp = function(){....};
$a = $temp();

It seems pointless...

Answer
      • 2
    • I'm a little confused what you're trying to accomplish or why you want to execute functions this way. Although I'm pretty sure there is no way to encapsulate a function like that in PHP. Functions in javascript are implemented as classes, whereas in PHP they are actual functions. For this reason they all exist within a global namespace, not within their self-contained namespace. The closest thing to a "self-calling function" I could imagine would be to define the function within eval()
      • 2
    • PHP5.3 have lambda support, and so I wanted to know if there was a way of invoking them without assigning them to a variable.

Function Call Chaining, e.g. foo()() is in discussion for PHP5.4. Until then, use call_user_func:

$a = call_user_func(function(){
    $hidden = 'a';
    return function($new) use (&$hidden){
        $hidden = $new;
        return $hidden;
    };
});

$a('foo');    
var_dump($a);

gives:

object(Closure)#2 (2) {
  ["static"]=>
  array(1) {
    ["hidden"]=>
    string(3) "foo"
  }
  ["parameter"]=>
  array(1) {
    ["$new"]=>
    string(10) "<required>"
  }
}

As of PHP7, you can immediately execute anonymous functions like this:

(function() { echo 123; })(); // will print 123
  • 59
Reply Report

Warm tip !!!

This article is reproduced from Stack Exchange / Stack Overflow, please click

Trending Tags

Related Questions