2011-01-24 81 views
0

我正在編寫一個IRC bot,並且在其中有一個數組存放命令,以及每個命令的動作。我可以調用名字存儲在變量中的函數嗎?

例如,存儲的操作可能是$array("action" => $irc->say_something())

請問我能夠調用與$array['action']或我將不得不做一些其他的方式?

+1

羅布,唐不要忘記測試函數是否真的存在,它是一種授權方法。 – FRAGA 2011-01-24 22:26:24

+0

這樣做,謝謝你FRAGA – Rob 2011-01-24 22:56:17

回答

2

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

當你想調用一個類的方法,你必須通過'func'不是一個字符串,但作爲數組:array($instance, 'func') - 你的情況:array($irc, 'say_something')

據透露,$array("action" => $irc->say_something())是沒有意義的。但你可能想寫array("action" => $irc->say_something())。但是,這會將方法調用的結果賦予「操作」 - 而不是您想要的。有關'action'值應該如何用作方法指針的最後一段。

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

我知道你可以做這樣的事情:

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

我猜,這也將工作,如果$函數是一個數組元素

相關問題