今天突发奇想到一个问题,然后研究了一晚上,看了一晚上的文档;最后都无果;我就想问一下,如何在调用一个函数给该函数传参时传一个匿名函数并运行得到其返回的结果,再将其结果作为传参传过去;
# ->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;
});
#上面种方式是可以的;
#但我想要能直接在传参时运行该函数;
#请问有其他但方法吗?;
有这种操作吗?;还是根本不可行;麻烦各位大大教教小弟;
3 回答
元芳怎么了
TA贡献1798条经验 获得超7个赞
我想要的大概是这种效果,原生有这种操作吗?
$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;
侃侃无极
TA贡献2051条经验 获得超10个赞
function sum($func,$c){
if(is_callable($func))
$num = $func($c);
var_dump($num);
}
sum(function($c){
return $c * $c;
}, 2);
慕桂英3389331
TA贡献2036条经验 获得超8个赞
你打印出来的是一个闭包的closure对象,因为你还没用使用这个闭包对象,所以你即使写了但是他还是没有返回值。稍微改动下代码这么写 拿你这段代码为例
只需要再a中使用一下闭包函数就会得到你想要的结果,var_dump($param());就是这样写就ok了。因为1.本身闭包函数就是通过closure对象来实现的2。闭包函数他还是一个函数,需要使用才能得到他的返回值。
- 3 回答
- 0 关注
- 387 浏览
添加回答
举报
0/150
提交
取消