オプション 1 (array(array) を に渡すcall_user_func_array
):
$urls = explode('/', $_GET['url']);
// note that $urls already was an array
call_user_func_array(array('ClassName', 'MethodName'), array($urls));
// inside class ClassName
function MethodName($urls) { // $urls is passed as array
}
オプション 2 (を使用func_get_args
):
$urls = explode('/', $_GET['url']);
// pass the array itself as argument, each split is new function argument
call_user_func_array(array('ClassName', 'MethodName'), $urls);
// inside class ClassName
function MethodName() { // this function has many arguments
$urls = func_get_args(); // gets all arguments into array
}
オプション 3 (call_user_func
の代わりに使用call_user_func_array
):
$urls = explode('/', $_GET['url']);
// pass the array itself as argument
call_user_func(array('ClassName', 'MethodName'), $urls);
// inside class ClassName
function MethodName($urls) { // call_user_func will pass any argument on directly
}
おそらく、オプション 3 が最も適切です。ただし、関数にさらに引数を追加する場合は拡張性が制限されますが、これはオプション 2 にも当てはまります。