39

嘿,我正在使用一个 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 数组。

4

3 回答 3

84

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

于 2009-05-06T09:04:17.173 回答
16

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

于 2015-04-16T10:05:20.580 回答
11

或者从PHP 7.1开始,您现在可以使用类型提示,称为iterable

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

此外,它可以代替Traversable使用接口进行迭代时使用。它还可以用作生成参数的生成器。

文档

于 2016-12-05T13:40:06.350 回答