2011-01-24 42 views
0

私はIRCボットをコーディングしています。その中には、コマンドを保持する配列と各コマンドのアクションがあります。変数に名前が格納されている関数を呼び出すことはできますか?

例えば、保存されたアクションは、私が$array['action']でそれを呼び出すことができるだろうか、私はそれにいくつかの他の方法をしなければならないでしょう$array("action" => $irc->say_something())

かもしれませんか?

+1

ロブ、ドンである場合、私はそれもうまくいくと思うだろう

$target = " blah "; $function = "trim"; $trimmed = $function($target); 

を関数が実際に存在し、それが許可されたメソッドであるかどうかをテストすることを忘れないでください。 – FRAGA

+0

ありがとうFRAGA – Rob

答えて

2

使用call_user_func('func', list, of, args)またはcall_user_func_array('func', array(containing, arguments))

あなたはクラスのメソッドを呼び出したいと、あなたが'func'ない文字列を渡す必要がありますが、配列のように:array($instance, 'func') - あなたの場合:array($irc, 'say_something')

はFYI、$array("action" => $irc->say_something())は意味がありません。しかし、おそらくarray("action" => $irc->say_something())と書いたかったでしょう。しかし、これはメソッド呼び出しの結果に 'action'を割り当てます。あなたが望むものではありません。それをメソッドポインタとして使用するには、 'action'値がどのように見えるかについての最後の段落を参照してください。

+0

オブジェクトの場合: 'call_user_func(配列($ irc、 'say_something')、配列(contains、arguments));' – Mchl

+0

私はすでにそれを含む回答を編集しました;) – ThiefMaster

+0

ありがとう、ThiefMaster。これは私のストレスの多くを和らげます。 – Rob

0

call_user_func http://us.php.net/call_user_func

<?php 
function barber($type) 
{ 
    echo "You wanted a $type haircut, no problem\n"; 
} 
call_user_func('barber', "mushroom"); 
call_user_func('barber', "shave"); 
?> 
1

確か:

$invocation = array("action" => array(
             'func' => array($irc,'say_something'), 
             'args' => array())); 

call_user_func_array($invocation['action']['func'], $invocation['action']['args']); 
0

私はあなたがこのような何か行うことができます知っている:$関数は、配列の要素

関連する問題