如何在函数中处理无限参数(类似于PHP的isset())?

30

你知道PHP的isset()函数可以接受多个参数吗?

就像我可以这样写:

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

我如何在自己的函数中实现这个?我如何处理传递的无限参数?

他们是如何做到的?

4个回答

55

func_get_args 可以实现您的需求:

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

您还可以使用func_get_arg来获取特定的参数(索引从0开始):

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

在使用之前,请考虑一下您是否真的需要无限制参数。数组是否已经足够?


数组在使用上不太方便。例如,我经常用 empty() 替换 isset(),因为 empty() 只接受一个参数。所以我经常声明一个函数 mempty(),它可以接受多个参数,但与 isset() 一样方便。顺便说一句,回答很好。 - Gall Annonim

46

4
原回答需要更新以包含此内容。 做得好。 - relipse

2
您可以使用func_get_args(),它将返回参数的数组。
function work_with_arguments() {
    echo implode(", ", func_get_args());
}

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

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接