私はIRCボットをコーディングしています。その中には、コマンドを保持する配列と各コマンドのアクションがあります。変数に名前が格納されている関数を呼び出すことはできますか?
例えば、保存されたアクションは、私が$array['action']
でそれを呼び出すことができるだろうか、私はそれにいくつかの他の方法をしなければならないでしょう$array("action" => $irc->say_something())
かもしれませんか?
私はIRCボットをコーディングしています。その中には、コマンドを保持する配列と各コマンドのアクションがあります。変数に名前が格納されている関数を呼び出すことはできますか?
例えば、保存されたアクションは、私が$array['action']
でそれを呼び出すことができるだろうか、私はそれにいくつかの他の方法をしなければならないでしょう$array("action" => $irc->say_something())
かもしれませんか?
使用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'値がどのように見えるかについての最後の段落を参照してください。
オブジェクトの場合: 'call_user_func(配列($ irc、 'say_something')、配列(contains、arguments));' – Mchl
私はすでにそれを含む回答を編集しました;) – ThiefMaster
ありがとう、ThiefMaster。これは私のストレスの多くを和らげます。 – Rob
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");
?>
確か:
$invocation = array("action" => array(
'func' => array($irc,'say_something'),
'args' => array()));
call_user_func_array($invocation['action']['func'], $invocation['action']['args']);
私はあなたがこのような何か行うことができます知っている:$関数は、配列の要素
ロブ、ドンである場合、私はそれもうまくいくと思うだろう
を関数が実際に存在し、それが許可されたメソッドであるかどうかをテストすることを忘れないでください。 – FRAGA
ありがとうFRAGA – Rob