更新
回顧下面的答案的。如果這兩個函數接受相同的參數,以相同的順序,你可以簡單地使用變量函數:
if (strpos($s, 'sign') === false) {
$func = 'my_mpurl';
} else {
$func = 'mpurl';
}
$func($s, $pagevar, $pages);
如果由於某種原因,你無法升級,並堅持使用舊版本,你可以使用call_user_func_array
:
if (strpos($s, 'sign') === false) {
$func = 'my_mpurl';
} else {
$func = 'mpurl';
}
call_user_func_array($func, array($s, $pagevar, $pages));
當然,你可以使用$func
var當成你想要/多需要打電話時,你需要的功能。
因此,基本上,根據某個變量的值,您希望使用相同的參數調用不同的函數。這就是call_user_func_array
是:
if (strpos($s, 'sign') === false) {
$func = 'my_mpurl';
} else {
$func = 'mpurl';
}
call_user_func_array($func, array($a, $b, $c));
同樣的事,但一點點的縮短(與短數組語法):
$func = 'mpurl';
if (strpos($s, 'sign') === false)
$func = 'my_'.$func;//prepend
call_user_func_array($func, [$s, $pagevar, $pages]);
//or even shorter
$func($s, $pagevar, $pages);
可變值作爲函數名(可變功能)語法介紹在PHP 5.3中。如果你還沒有運行5.3,你應該升級,但同時,你可以使用call_user_func_array
或者你做'$ func($ a,$ b,$ c);':-) – jeroen 2014-10-30 15:42:50
@jeroen:只是測試,以確保它甚至可能,將它添加到我的答案 – 2014-10-30 15:44:08
是的,http:///php.net/manual/en/functions.variable-functions.php – jeroen 2014-10-30 15:44:32