如何将一个字符串传递给期望可变参数的PHP函数?

3
我有一个PHP函数,它可以接收不定数量的参数。
function foo() {
     $numargs = func_num_args(); 
     if ($numargs < 3) {
         die("expected number of args is 3, not " . $numargs);
     }  
...

如果我这样调用它:
   foo(1, 12, 17, 3, 5); 

没问题,但是如果我这样调用它:
   $str = "1, 12, 17, 3, 5"; 
   foo($str); 

出错是因为它说我只传递了一个参数。如果我不想改变函数本身,只想改变调用方法,我需要做出哪些改变呢。

-- 更新:为了避免使用explode函数,我简单地构建了一个数组。由于该函数是成员函数,所以调用方式会有些不同。最终代码如下:

$list = array(); 
$list[] = 1;
$list[] = 12;
$list[] = 17;
// etc. 
call_user_func_array(array($this, 'foo'), $list);

我认为这可能对其他人有用。

2个回答

4
这应该会起作用:
$str = "1, 12, 17, 3, 5"; 
$params = explode(', ', $str );
call_user_func_array ( 'foo', $params );
call_user_func_array() 允许您调用一个函数,并将存储在数组中的参数传递给它。因此,索引为0的数组项成为函数的第一个参数,依此类推。更多信息请查看:http://www.php.net/manual/en/function.call-user-func-array.php
更新:如果您希望参数为整数(使用上述代码段会将其传递为字符串),则需要对 $params 数组进行一些额外的处理。

1
更新加一分。是的,字符串传递也给我带来了麻烦,所以我使用了一个数组来确保它们是整数类型,正如我在上面的问题澄清中所指出的那样。 - Scott C Wilson

3
$str = "1, 12, 17, 3, 5"; 
call_user_func_array('foo',explode(',',$str));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接