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

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

我能做到:

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

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

他们是怎么做到的?

【问题讨论】:

    标签: php function parameters parameter-passing param


    【解决方案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 的参数数组。

      【讨论】:

        猜你喜欢
        • 2016-09-04
        • 2011-10-25
        • 1970-01-01
        • 2011-06-27
        • 2014-06-09
        • 2022-01-20
        • 2013-10-18
        • 2015-09-30
        • 2014-01-09
        相关资源
        最近更新 更多