PHP闭包函数的问题

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

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

一只萌萌小番薯
浏览 376回答 5
5回答

汪汪一只猫

调用$name这个闭包函数需要使用$name(),这个是没有疑问的。 但是$name()返回的值是什么呢?返回的是$name2,而$name2是一个闭包函数,而调用$name2则需要使用$name2()。 所以echo $name()()就等同于: $tmp = $name(); // $tmp === $name2 $tmp();

慕田峪7331174

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

森栏

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

牧羊人nacy

函数也是一种值、一种对象来考虑,就像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;

慕田峪4524236

因为返回值是个方法啊
打开App,查看更多内容
随时随地看视频慕课网APP