29

你知道 PHP 是如何isset()接受多个(也没有限制)参数的吗?

就像我可以做的:

isset($var1,$var2,$var3,$var4,$var5,$var6,$var7,$var8,$var9,$var10,$var11);
//etc etc

我怎么能在我自己的功能中做到这一点?我将如何处理传递的无穷大参数?

他们是如何做到的呢?

4

4 回答 4

55

func_get_args会做你想做的事:

function infinite_parameters() {
    foreach (func_get_args() as $param) {
        echo "Param is $param" . PHP_EOL;
    }
}

您还可以使用func_get_arg来获取特定参数(它是零索引的):

function infinite_parameters() {
    echo func_get_arg(2);
}

但要小心检查您是否有该参数:

function infinite_parameters() {
    if (func_num_args() < 3) {
        throw new BadFunctionCallException("Not enough parameters!");
    }
}

您甚至可以将func_*_arg常规参数混合在一起:

function foo($param1, $param2) {
    echo $param1; // Works as normal
    echo func_get_arg(0); // Gets $param1
    if (func_num_args() >= 3) {
        echo func_get_arg(2);
    }
}

但是在使用它之前,请考虑一下您是否真的想要具有不定参数。数组不够吗?

于 2012-08-28T18:09:42.253 回答
41

从 PHP 5.6 开始,您可以使用令牌“ ...

例子:

<?php
function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

echo sum(1, 2, 3, 4);
?>

来源: http: //php.net/manual/en/functions.arguments.php#functions.variable-arg-list

于 2014-11-04T13:44:55.127 回答
2

您可以使用func_get_args(),它将返回一个参数数组。

function work_with_arguments() {
    echo implode(", ", func_get_args());
}

work_with_arguments("Hello", "World");
//Outputs: Hello, World
于 2012-08-28T18:09:35.143 回答
1

在函数内部调用func_get_args()将返回传递给 PHP 的参数数组。

于 2012-08-28T18:09:38.203 回答