我正在尝试创建一个带有 SEO 友好 URL 的内容管理系统。我的问题是,使用 htaccess 我已经让我的 URL 通过了$_GET['url']
。
为了获得“call_user_func_array”的参数,我只是$_GET['url']
通过/
我允许我的用户为带有斜杠 ( /
) 的 SEO 友好 URL 创建短标签,因此他们的短标签有时会作为更多参数传递。有没有办法在调用类/函数中再次收集所有参数?
我正在尝试创建一个带有 SEO 友好 URL 的内容管理系统。我的问题是,使用 htaccess 我已经让我的 URL 通过了$_GET['url']
。
为了获得“call_user_func_array”的参数,我只是$_GET['url']
通过/
我允许我的用户为带有斜杠 ( /
) 的 SEO 友好 URL 创建短标签,因此他们的短标签有时会作为更多参数传递。有没有办法在调用类/函数中再次收集所有参数?
$args = func_get_args();
将为您提供传递给函数的所有参数的数组。这实际上是在撤消您使用call_user_func_array()
;所做的事情。
选项 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 也是如此。