PHP闭包函数的问题

$name = function(){
    $a="x";
        $name2=function() use ($a){
        return "我喜欢吃".$a;
        };
        return $name2;
};

echo $name()();//请问这里为什么要写两个括号才能输出?

阅读 3k
5 个回答

调用$name这个闭包函数需要使用$name(),这个是没有疑问的。

但是$name()返回的值是什么呢?返回的是$name2,而$name2是一个闭包函数,而调用$name2则需要使用$name2()

所以echo $name()()就等同于:

$tmp = $name(); // $tmp === $name2
$tmp();

因为你上面的代码用了两个 = function () {},定义了两个嵌套的闭包。俩闭包对两个括号,这不是很合理么。

嵌套闭包,$name()的返回值是一个闭包函数,$name()()才是调用内层闭包

函数也是一种值、一种对象来考虑,就像123、1.341、"str",这没什么难的。

$name是一个函数:

function(){
$a="x";
    $name2=function() use ($a){
    return "我喜欢吃".$a;
    };
    return $name2;
};

$name()是此函数(以上函数)$name的返回值(也就是这个内部返回的函数$name2):

function() use ($a){
        return "我喜欢吃".$a;
        };

$name()()也就是调用内部的$name2对应函数,结果当然是这个语句的返回值return "我喜欢吃".$a;

因为返回值是个方法啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题