我正在編寫一個IRC bot,並且在其中有一個數組存放命令,以及每個命令的動作。我可以調用名字存儲在變量中的函數嗎?
例如,存儲的操作可能是$array("action" => $irc->say_something())
請問我能夠調用與$array['action']
或我將不得不做一些其他的方式?
我正在編寫一個IRC bot,並且在其中有一個數組存放命令,以及每個命令的動作。我可以調用名字存儲在變量中的函數嗎?
例如,存儲的操作可能是$array("action" => $irc->say_something())
請問我能夠調用與$array['action']
或我將不得不做一些其他的方式?
使用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'值應該如何用作方法指針的最後一段。
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']);
我知道你可以做這樣的事情:
$target = " blah ";
$function = "trim";
$trimmed = $function($target);
我猜,這也將工作,如果$函數是一個數組元素
羅布,唐不要忘記測試函數是否真的存在,它是一種授權方法。 – FRAGA 2011-01-24 22:26:24
這樣做,謝謝你FRAGA – Rob 2011-01-24 22:56:17