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 の引数配列と同様に、同じ方法で関数を呼び出します。

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 に答える