题 PHP将所有参数作为数组获取?


嘿,我正在使用PHP函数,它接受多个参数并格式化它们。目前,我正在使用这样的东西:

function foo($a1 = null, $a2 = null, $a3 = null, $a4 = null){
    if ($a1 !== null) doSomethingWith($a1, 1);
    if ($a2 !== null) doSomethingWith($a2, 2);
    if ($a3 !== null) doSomethingWith($a3, 3);
    if ($a4 !== null) doSomethingWith($a4, 4);
}

但我想知道我是否可以使用这样的解决方案:

function foo(params $args){
    for ($i = 0; $i < count($args); $i++)
        doSomethingWith($args[$i], $i + 1);
}

但仍然以相同的方式调用函数,类似于C#中的params关键字或JavaScript中的arguments数组。


28
2018-05-06 08:59


起源




答案:


func_get_args 返回一个包含当前函数的所有参数的数组。


64
2018-05-06 09:04



有一个值得指出的func_get_args问题;你不能将它传递给另一个函数调用。 - Rob
@Rob如果你去,你可以 $args = func_get_args() 接着 call_user_func_array($func, $args) - alex
func_get_args()只返回那些被PASSED到函数调用的参数的值,而不是函数定义中定义的所有参数。 - Aditya M P
我可以这样做: func_get_args('argument_name') ?获取参数的值。 - Francisco Corrales Morales
@FranciscoCorralesMorales您无法通过参数名称获取值,但如果您使用参数offset可以正常使用,则可以使用 func_get_arg()。 - Chris


如果您使用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


6
2018-04-16 10:05





或者作为 PHP 7.1 您现在可以使用名为的类型提示 iterable

function f(iterable $args) {
    foreach ($args as $arg) {
        // awesome stuff
    }
}

此外,它可以代替使用 Traversable 当您使用接口迭代时。它也可以用作产生参数的发生器。

文档


6
2017-12-05 13:40