2009-07-19 60 views
1

有没有办法将无限量的参数传递给函数,并且可以访问所有这些参数而无需在标题中定义每个参数。这里是一个例子,使其更加清晰:访问未定义的参数

function doSomething($var1="", $var2="".........) 
{ 
    // Do something with the arguments 
} 

我不想去定义一堆参数。有没有办法只抓取数组中的所有参数?即使他们没有被定义? (PHP BTW)

最终的结果应该是这个样子:

func("hello", "ya", "hi", "blah", "test", "go"); 

function func() 
{ 
    //Loop Over Arguments 
} 

我已经看到了一些PHP函数,能够接受的论点看似无限的数字,但可以用户自定义函数做一样?

回答

5

您可以使用func_get_argsfunc_get_argfunc_num_args

考虑您已声明这三个变量:

$param_1 = "A"; 
$param_2 = "B"; 
$param_3 = "C"; 

这里的第一个例子,使用func_get_args获得在一个阵列中的所有参数:

my_function_1($param_1, $param_2, $param_3); 

function my_function_1() 
{ 
    $num_args = func_num_args(); 
    if ($num_args >= 1) { 
     $args = func_get_args(); 
     var_dump($args); 
    } 
} 

这里是另一个获取参数的一个接一个,func_get_arg

my_function_2($param_1, $param_2, $param_3); 

function my_function_2() 
{ 
    $num_args = func_num_args(); 
    if ($num_args >= 1) { 
     $args = func_get_args(); 
     for ($i = 0 ; $i<$num_args ; $i++) { 
      var_dump(func_get_arg($i)); 
     } 
    } 
} 
3

请参阅func_get_args。它确实是你想要的

+0

感谢您快速回复。 – 2009-07-19 22:31:57

0

你可以找到多少个参数的函数与using func_num_args()调用。然后,您可以通过使用func_get_arg(index)指定索引来指定每个参数,或者使用func_get_args()将所有参数指定为数组。

例子:

function variable_arguments() { 
    echo "This function was called with ".func_num_args()." arguments.<br />"; 
    echo "Those arguments were:<br /><pre>"; 
    echo print_r(func_get_args()); 
    echo "</pre>"; 
} 

variable_arguments("Hello", 42, array(true)); 
0

正如其他人发布的可以使用func_get_args()但为什么不尝试通过在阵列中的参数之前? PHP是松散的类型,所以你可以存储任何东西。

$params = array(1, 2, 'something'); 
doSomething($params); 

function doSomething($params) { 
    foreach ($params as $value) { 
    // do something. 
    } 
} 

我喜欢这个,因为它使可见您期望的功能参数开发商和你,你通过了paramters阵列小的开销喜欢还可以通过许多参数。