鍍金池/ 問答/PHP/ php 在調(diào)用一個函數(shù)給該函數(shù)傳參時傳一個匿名函數(shù)如何讓其運行并且得到其返回的結(jié)

php 在調(diào)用一個函數(shù)給該函數(shù)傳參時傳一個匿名函數(shù)如何讓其運行并且得到其返回的結(jié)果,再將其結(jié)果作為傳參傳過去?

今天突發(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ù);
#請問有其他但方法嗎?;

有這種操作嗎?;
還是根本不可行;
麻煩各位大大教教小弟;

回答
編輯回答
溫衫

你打印出來的是一個閉包的closure對象,因為你還沒用使用這個閉包對象,所以你即使寫了但是他還是沒有返回值。稍微改動下代碼這么寫 拿你這段代碼為例
clipboard.png
只需要再a中使用一下閉包函數(shù)就會得到你想要的結(jié)果,var_dump($param());就是這樣寫就ok了。因為1.本身閉包函數(shù)就是通過closure對象來實現(xiàn)的2。閉包函數(shù)他還是一個函數(shù),需要使用才能得到他的返回值。

2018年4月15日 06:17
編輯回答
陌上花

嘗試參考call_user_func_array函數(shù)

2018年4月1日 09:50
編輯回答
薔薇花

我想要的大概是這種效果,原生有這種操作嗎?

$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;
2017年7月26日 12:02
編輯回答
執(zhí)念
function sum($func,$c){
    if(is_callable($func))
        $num = $func($c);
    var_dump($num);
}

sum(function($c){
    return $c * $c;
}, 2);
2017年5月13日 19:48