web-dev-qa-db-ja.com

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

33
MiffTheFox

func_get_args は、現在の関数のすべての引数を含む配列を返します。

73
bb.

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

10
Joren

またはPHP 7.1の時点で、iterableと呼ばれるタイプヒントを使用できるようになりました。

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

また、インターフェイスを使用して反復する場合、Traversableの代わりに使用できます。同様に、パラメーターを生成するジェネレーターとしても使用できます。

ドキュメント

8
Thielicious