PHP5.3中的自执行函数是什么?

36
我尝试从JS中借用一些编程范式到PHP中(只是为了好玩)。有没有办法做到这一点?
$a = (function(){
  return 'a';
})();

我认为通过结合use,这可以是一种像JS样式隐藏变量的好方法。

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

现在我需要做:

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

看起来毫无意义...


1
我很难理解... :) 你具体指的是什么? - Chetan Sharma
我有点困惑你想要实现什么或者为什么你想以这种方式执行函数。虽然我很确定在PHP中没有办法像那样封装一个函数。在JavaScript中,函数被实现为类,而在PHP中它们是实际的函数。因此,它们都存在于全局命名空间中,而不是在它们自己的命名空间中。我能想象到最接近“自调用函数”的东西就是在eval()中定义函数。 - stevendesu
XiroX:你是否考虑提出一个问题? - salathe
3
PHP5.3支持lambda表达式,我想知道是否有一种方法可以在不将它们分配给变量的情况下调用它们。 - AriehGlazer
1个回答

68

函数调用链,例如foo()()正在讨论是否加入PHP5.4。在此之前,请使用call_user_func

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

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

提供:

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

从PHP7开始,您可以像这样立即执行匿名函数:

(function() { echo 123; })(); // will print 123

你能否更新一下这个吗?非常感谢。 - M H
4
太棒了,我毫不怀疑这将对社区和未来的谷歌员工有所价值。 - M H
1
FYI,PHP 5.6 不支持函数调用链(允许 (function () {...})();)。 - Josef Engelfrost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接