Php 将可变长度的数组传递给类方法
我正在尝试为自己创建一个小小的MVC框架,并使用类似的url结构:Php 将可变长度的数组传递给类方法,php,arrays,methods,Php,Arrays,Methods,我正在尝试为自己创建一个小小的MVC框架,并使用类似的url结构:http://www.example.com/className/methodName/var1/var2/var3。我想让它能够容纳任何数量的变量 除了/var1/var2/var3部分之外,我拥有我需要的所有信息。目前,我在“/”上的数组中分解了它(),因此:var[0]=“var1”,var[1]=“var2”,var[2]=“var3” 由于将调用的方法是未知的,并且每个方法可能需要不同数量的参数,因此我想找出一种能够传递
http://www.example.com/className/methodName/var1/var2/var3
。我想让它能够容纳任何数量的变量
除了/var1/var2/var3
部分之外,我拥有我需要的所有信息。目前,我在“/”上的数组中分解了它(),因此:var[0]=“var1”,var[1]=“var2”,var[2]=“var3”
由于将调用的方法是未知的,并且每个方法可能需要不同数量的参数,因此我想找出一种能够传递参数的方法,如下所示:
$controller->$function($var1, $var2, $var3);
而不是
$controller->$function($var);
我意识到我可以把逗号分隔的变量串在一起,比如$var1、$var2、$var3
,然后使用eval()来做我想做的事情,但是我想知道是否有更好的方法来实现它。我不希望对此使用eval(),因为它将使用用户提交的数据
在最坏的情况下,我想我会在评估之前尝试清理数据,但我仍然希望避免它
我的另一个潜在想法是使用foreach()并循环方法调用中的每个元素。但即使这样对我来说也有点混乱
另一方面,传递可变数量的参数以将它们组合在一个数组中并传入单个参数的标准方法是什么
如果有人知道更优雅的方法,我将不胜感激。使用
@道伯特的回答将补充我的建议 您可以创建一个不接受任何参数的函数,并且可以自由地传递尽可能多的参数(或者根本不接受任何参数),您只需使用PHP函数,如:
func\u get\u args()
、func\u num\u args()
和func\u get\u arg(int arg\u index)
来进行操作
下面是一个例子:
function syncOrderRelation(){
$num_arguments = func_num_args();
$arguments = func_get_args();
#gets all the arguments in the request
list($userID,$spID,$productID) = $arguments;
#if you know what you're expecting or
for($i = 0; $i < $num_arguments; $i++){
$argument_at_index = func_get_arg($i);
}
}
剩下的就看你了…快乐编码 同意。还值得一看PHP中的重载/魔术方法。具体地说:你真的读过你链接到的手册页面吗?我已经修正了这些论点,(我认为这是一个打字错误)。@tereško,对不起,我错过了什么?(除了已经修好的东西。)
function syncOrderRelation(){
$num_arguments = func_num_args();
$arguments = func_get_args();
#gets all the arguments in the request
list($userID,$spID,$productID) = $arguments;
#if you know what you're expecting or
for($i = 0; $i < $num_arguments; $i++){
$argument_at_index = func_get_arg($i);
}
}
syncOrderRelation();
syncOrderRelation($var1,$var2,var3);
syncOrderRelation($var1);
#or you could call it as @Dogbert suggested since the function will accept whatever
#arguments you supply