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

28 php parameters param function parameter-passing

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

就像我能做的那样:

isset($var1,$var2,$var3,$var4,$var5,$var6,$var7,$var8,$var9,$var10,$var11);
//etc etc
Run Code Online (Sandbox Code Playgroud)

我怎么能在自己的功能中做到这一点?如何通过无限参数传递?

他们是如何做到的呢?

Wal*_*han 54

func_get_args 会做你想做的事:

function infinite_parameters() {
    foreach (func_get_args() as $param) {
        echo "Param is $param" . PHP_EOL;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

function infinite_parameters() {
    echo func_get_arg(2);
}
Run Code Online (Sandbox Code Playgroud)

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

function infinite_parameters() {
    if (func_num_args() < 3) {
        throw new BadFunctionCallException("Not enough parameters!");
    }
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以将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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但在使用它之前,请考虑一下你是否真的想拥有不确定的参数.阵列不够吗?

  • 好的答案!!,就像一个很好的,简短而聪明的PHP课程;) (6认同)

Mar*_*ard 36

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

例:

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

echo sum(1, 2, 3, 4);
?>
Run Code Online (Sandbox Code Playgroud)

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

  • 应更新原始答案以包含此内容.做得好. (3认同)