2011-12-23 23 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(); 
} 

を使用しないようにしようとしていますか、それが最善の方法であるとすることができ、私は、任意のタイプのクロージャを使うべきではないのですか?

PHP 5.3で

答えて

2

同じ考え、あなたが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

+0

ヒントを入力する方法はありますか? 'function xxx(func $ function){}' –

+0

@ItayMoav:ヒントコールバックをタイプすることはできませんが、パラメータがコールバックでないかどうかを検出する条件を追加できます。 –

0

この試してみてください:あなたがここにhttp://codepad.viper-7.com/Ut5yGQ

注作業例を参照することができ

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

を:私は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も参照してください。

関連する問題