访问未定义的参数

时间:2009-07-19 22:26:34

标签: php

是否有办法将无限量的参数传递给函数,并访问所有这些参数,而无需在标题中定义每个参数。这是一个让它更清晰的例子:

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 个答案:

答案 0 :(得分: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));
        }
    }
}

答案 1 :(得分:3)

func_get_args。它完全符合您的要求

答案 2 :(得分:2)

是的,肯定有。查看func_get_args(),它应该完全符合您的需求。

答案 3 :(得分: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));

答案 4 :(得分:0)

正如其他人发布之前您可以使用func_get_args()但为什么不尝试传递数组中的参数? PHP的类型是松散的,因此您可以在其中存储任何内容。

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

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

我更喜欢这个,因为它使开发人员可以看到你期望函数的参数,你仍然可以通过paramters数组传递尽可能多的参数,而且开销很小。