如何在一个函数的参数无穷的工作(如PHP的isset()函数)(How to work with i

2019-06-27 11:50发布

你知道PHP的如何isset()可以接受多个(不限制任何)的论点?

就像我可以这样做:

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

我怎么能做到这一点我自己的功能? 我该如何将能够通过与无限的参数工作?

他们是如何做到的呢?

Answer 1:

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

但是,在使用它之前,想想你是否真的想不确定参数。 将一个数组是不够的?



Answer 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-arg-list



Answer 3:

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

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

work_with_arguments("Hello", "World");
//Outputs: Hello, World


Answer 4:

调用func_get_args()的函数中会返回传递给PHP的参数数组。



文章来源: How to work with infinity arguments in a function (like PHP's isset())