如何在函数中使用无限参数(如 PHP isset())[重复]

Posted

技术标签:

【中文标题】如何在函数中使用无限参数(如 PHP isset())[重复]【英文标题】:How to work with infinity arguments in a function (like PHP's isset()) [duplicate] 【发布时间】:2012-08-23 07:11:58 【问题描述】:

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

我能做到:

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

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

他们是怎么做到的?

【问题讨论】:

【参考方案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);
    

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

【讨论】:

数组使用起来不太方便。例如,我经常将 isset() 替换为 empty(),它只接受一个 arg。所以我经常声明函数 mempty() 可以接受很多参数,但和 isset 一样方便。不错的答案顺便说一句。【参考方案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

【讨论】:

应更新原始答案以包含此内容。干得好。【参考方案3】:

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

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


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

【讨论】:

【参考方案4】:

在函数内部调用 @987654321@ 将返回传递给 PHP 的参数数组。

【讨论】:

以上是关于如何在函数中使用无限参数(如 PHP isset())[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何用php创建一个无限遍历数组,并打印

php无限遍历目录

php--------使用 isset()判断字符串长度速度比strlen()更快

PHP 函数可以接受无限数量的参数吗? [复制]

如何在php中通过引用传递无限参数[重复]

PHP中empty()和isset()的区别