2011-12-23 103 views
2

我有一個功能列表a(),b(),c()
我有一個main()函數。如何將函數作爲參數傳遞給另一個函數?

根據情況,我需要傳遞一個不同的函數給main()來使用。
在javascript中這將是:

var a = function(){} 
var b = function(){} 
var c = function(){} 

var func = (some logic) a, b or c; 

main(func); 

我該怎麼做,在PHP5.3?
我試圖避免使用

$func_name = "a"; 
main($func_name){ 
    $func_name(); 
} 

或者可能這是最好的方式,我不應該使用任何類型的倒閉?

回答

2
在PHP 5.3

同樣的想法,因爲你可以創建anonymous functions

$sayHello = function($var) 
{ 
    echo "Hello ", $var; 
}; 

// Logic here to determine what $func is set to 
$func = $sayHello;  

function callCustom($function) 
{ 
    if(!is_callback($function)) 
    { 
     // throw exception 
    } 
    $function("World"); 
} 

callCustom($func); // Hello World 
+0

+1對於一個非常體面的解釋佚功能 – Cyclone 2011-12-23 02:03:32

+0

有沒有辦法鍵入提示呢? '函數xxx(func $ function){} – 2011-12-23 03:34:05

+0

@ItayMoav:你不能輸入提示回調,但是你可以添加一個條件來檢測參數是不是回調。 – 2011-12-23 13:48:07

0

試試這個:

$a = function(){}; 
$b = function(){}; 
$c = function(){}; 

switch (rand(0, 2)) { 
    case 0: $func = $a; break; 
    case 1: $func = $b; break; 
    case 2: $func = $c; break; 
} 

var_dump($func); 

這裏你可以看到一個工作示例http://codepad.viper-7.com/Ut5yGQ

注:我用var_dump而不是main,因爲main未定義

0

在PHP中,任何「可調用的」(is_callable­Docs)都可以調用(調用)。該手冊通常將這些參數命名爲Callback, a pseudo-type in PHP­Docs

你可以使用任何不同的回調,並將它們傳遞作爲函數參數:

function main($callback) 
{ 
    call_user_func($callback); 
} 

那麼你的功能將與任何有效的PHP回調的工作。

變量函數調用:

function name() {}; 
    $function = 'name'; # function name as string 
    $function(); # invoke 

匿名函數作爲變量函數調用:

$function = function() {}; # define function 
    $function(); # invoke 

下一步是,功能可以通過使用變量,一些實例中被稱爲

還請參閱Variable Functions­Docs

相關問題