今天突發(fā)奇想到一個問題,然后研究了一晚上,看了一晚上的文檔;最后都無果;我就想問一下,如何在調(diào)用一個函數(shù)給該函數(shù)傳參時傳一個匿名函數(shù)并運行得到其返回的結(jié)果,再將其結(jié)果作為傳參傳過去;
# ->true->callback()->end;
#我實現(xiàn)的代碼是: FUNC(callback)->is_func
# ->false->end;
#我想法中要的執(zhí)行順序是: FUNC(callback)->callback()->FUNC(resutl)->end;
下面是隨意寫的一段代碼,大概意思就是就是在傳參時進行運算;
$c = 2;
function sum($num){
var_dump($num);
}
sum(function()use($c){
$c = $c * $c;
return $c;
});
#上面的代碼打印出來的是function,我想要的效果是運行這個函數(shù);
#還是只有判斷一下然后執(zhí)行才有效;
$c = 2;
function sum($num){
if(is_callable($num))
$num = $num();
var_dump($num);
}
sum(function()use($c){
$c = $c * $c;
return $c;
});
#上面種方式是可以的;
#但我想要能直接在傳參時運行該函數(shù);
#請問有其他但方法嗎?;
有這種操作嗎?;還是根本不可行;麻煩各位大大教教小弟;
3 回答

元芳怎么了
TA貢獻1798條經(jīng)驗 獲得超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條經(jīng)驗 獲得超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條經(jīng)驗 獲得超8個贊
你打印出來的是一個閉包的closure對象,因為你還沒用使用這個閉包對象,所以你即使寫了但是他還是沒有返回值。稍微改動下代碼這么寫 拿你這段代碼為例
只需要再a中使用一下閉包函數(shù)就會得到你想要的結(jié)果,var_dump($param());就是這樣寫就ok了。因為1.本身閉包函數(shù)就是通過closure對象來實現(xiàn)的2。閉包函數(shù)他還是一個函數(shù),需要使用才能得到他的返回值。
- 3 回答
- 0 關(guān)注
- 413 瀏覽
添加回答
舉報
0/150
提交
取消