PHP call_user_func_array - 获取函数内的WHOLE数组

时间:2011-03-16 11:51:23

标签: php class content-management

我正在尝试使用SEO友好的URL创建一个内容管理系统。我的问题是,使用htaccess我已经通过$_GET['url']传递了我的网址。

要获取“call_user_func_array”的参数,我只是$_GET['url']

爆炸/

我允许我的用户为SEO友好的URL WITH 斜杠(/)创建短标签,因此他们的短标签有时会作为更多参数传递。有没有办法在调用类/函数中再次收集所有参数?

2 个答案:

答案 0 :(得分:2)

$args = func_get_args();

将为您提供传递给函数的所有参数的数组。这实际上是通过使用call_user_func_array();

来取消您所做的事情

答案 1 :(得分:2)

选项1(将数组(数组)传递给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也是如此。