猿问

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;
});

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

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

红颜莎娜
浏览 388回答 3
3回答

元芳怎么了

我想要的大概是这种效果,原生有这种操作吗? $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);

慕桂英3389331

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