php 在调用一个函数给该函数传参时传一个匿名函数如何让其运行并且得到其返回的结果,再将其结果作为传参传过去?

今天突发奇想到一个问题,然后研究了一晚上,看了一晚上的文档;
最后都无果;
我就想问一下,如何在调用一个函数给该函数传参时传一个匿名函数并运行得到其返回的结果,再将其结果作为传参传过去;


#                                      ->true->callback()->end;
#我实现的代码是: FUNC(callback)->is_func
#                                      ->false->end;

#我想法中要的执行顺序是: FUNC(callback)->callback()->FUNC(resutl)->end;

下面是随意写的一段代码,大概意思就是就是在传参时进行运算;

$c = 2;
function sum($num){
    var_dump($num);
}

sum(function()use($c){
    $c = $c * $c;
    return $c;
});

#上面的代码打印出来的是function,我想要的效果是运行这个函数;
#还是只有判断一下然后执行才有效;

$c = 2;
function sum($num){
    if(is_callable($num))
        $num = $num();
    var_dump($num);
}

sum(function()use($c){
    $c = $c * $c;
    return $c;
});

#上面种方式是可以的;
#但我想要能直接在传参时运行该函数;
#请问有其他但方法吗?;

有这种操作吗?;
还是根本不可行;
麻烦各位大大教教小弟;

阅读 2.8k
4 个回答

我想要的大概是这种效果,原生有这种操作吗?

$num = 3;

function print($param){
    var_dump($param);
}

function callFunc($main,$callback){
    $param = $callback();
    $main($param);
}

callFunc('print',function()use($num){
   return $num;
});

而且要是能做到像上面问题那样就更好了;


$num = 1;

function a($param){
    var_dump($param);
}

a(function()use($num){
   return $num+$num; 
});

# 打印出来的是function本身,这没有问题,有什么方法能让其打印出来的是2;
function sum($func,$c){
    if(is_callable($func))
        $num = $func($c);
    var_dump($num);
}

sum(function($c){
    return $c * $c;
}, 2);

你打印出来的是一个闭包的closure对象,因为你还没用使用这个闭包对象,所以你即使写了但是他还是没有返回值。稍微改动下代码这么写 拿你这段代码为例
clipboard.png
只需要再a中使用一下闭包函数就会得到你想要的结果,var_dump($param());就是这样写就ok了。因为1.本身闭包函数就是通过closure对象来实现的2。闭包函数他还是一个函数,需要使用才能得到他的返回值。

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