如何在函数中使用无穷大参数(如PHP';s isset())


How to work with infinity arguments in a function (like PHP's isset())

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

就像我能做的:

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

我怎样才能在自己的职责范围内做到这一点?我怎样才能处理传递的无穷大参数?

他们是怎么做到的?

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);
    }
}

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

从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-参数列表

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

function work_with_arguments() {
    echo implode(", ", func_get_args());
}
work_with_arguments("Hello", "World");
//Outputs: Hello, World

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