为了账号安全,请及时绑定邮箱和手机立即绑定

PHP闭包函数的问题

PHP闭包函数的问题

PHP
一只萌萌小番薯 2019-03-06 14:37:19
$name = function(){ $a="x"; $name2=function() use ($a){ return "我喜欢吃".$a; }; return $name2; }; echo $name()();//请问这里为什么要写两个括号才能输出?
查看完整描述

5 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

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

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

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

$tmp = $name(); // $tmp === $name2
$tmp();
查看完整回答
反对 回复 2019-03-18
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

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

查看完整回答
反对 回复 2019-03-18
?
森栏

TA贡献1810条经验 获得超5个赞

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

查看完整回答
反对 回复 2019-03-18
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

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

查看完整回答
反对 回复 2019-03-18
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

因为返回值是个方法啊

查看完整回答
反对 回复 2019-03-18
  • 5 回答
  • 0 关注
  • 375 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信