PHP通过带参数的字符串调用方法的最佳方法?
我正在创建一个非常简单的web服务,我不想麻烦用一些框架来实现它 我正在尝试这样做,以便通过使用类似PHP通过带参数的字符串调用方法的最佳方法?,php,web-services,Php,Web Services,我正在创建一个非常简单的web服务,我不想麻烦用一些框架来实现它 我正在尝试这样做,以便通过使用类似 $myMethod = "test"; $args = array("arg1", "arg2"); $myMethod(); 问题是每个方法可能有不同数量的参数。除了只传递一个参数数组之外,还有没有一种方法可以调用$myMethod()并像通常的myMethod(arg1,arg2)一样传递参数?使用call\u user\u func\u数组:另外,为了帮助您使用不同数量的参数,请参见fu
$myMethod = "test";
$args = array("arg1", "arg2");
$myMethod();
问题是每个方法可能有不同数量的参数。除了只传递一个参数数组之外,还有没有一种方法可以调用$myMethod()并像通常的myMethod(arg1,arg2)一样传递参数?使用call\u user\u func\u数组:另外,为了帮助您使用不同数量的参数,请参见
func\u get\u args()
因此,您可以在函数之间移动不同数量的参数。唯一的方法是使用
调用用户函数数组()
,但此函数非常慢
你知道他们是怎么告诉你不要在PHP中使用eval()
的吗?想想call\u user.*
函数,就像eval()
——它们的速度非常慢
解决方案
1)您可以像这样盲目地传递参数:
$mtd = 'test';
$args = array('a','b');
array_pad($args, 8, null);
return $mtd($args[0],$args[1],$args[2],$args[3],$args[4],$args[5],$args[6],$args[7]);
2)您可以计算参数并为每个参数调用不同的硬编码函数:
$mtd = 'test';
$args = array('a','b');
switch(count($args)){
case 0: return $mtd();
case 1: return $mtd($args[0]);
case 2: return $mtd($args[0],$args[1]);
case 3: return $mtd($args[0],$args[1],$args[2]);
case 4: return $mtd($args[0],$args[1],$args[2],$args[3]);
case 5: return $mtd($args[0],$args[1],$args[2],$args[3],$args[4]);
default: return call_user_func_array($mtd, $args); // slow, but safe
}
3)最后,你可以用Drupal做的同样的事情来解决这个问题;生成并缓存PHP代码。生成的代码是硬编码的,用于处理特定数量的参数,但清除缓存将使其根据需要增加/减少参数计数。另外,这是可能的快捷方式。谢谢,当我需要决定调用用户时,我会考虑这一点。太糟糕了,没有办法调用相同的函数
func\u get\u args(myFunctionIdentifier)
并传入函数名,以便在调用函数时知道其参数列表。我猜这会打破PHP的编程方法overloading@Walt可以,PHP支持反射;使用ReflectionFunction
类。
$mtd = 'test';
$args = array('a','b');
switch(count($args)){
case 0: return $mtd();
case 1: return $mtd($args[0]);
case 2: return $mtd($args[0],$args[1]);
case 3: return $mtd($args[0],$args[1],$args[2]);
case 4: return $mtd($args[0],$args[1],$args[2],$args[3]);
case 5: return $mtd($args[0],$args[1],$args[2],$args[3],$args[4]);
default: return call_user_func_array($mtd, $args); // slow, but safe
}