web-dev-qa-db-ja.com

関数内で無限引数を操作する方法(PHP isset()など)

PHPのisset()が複数の(制限なしの)引数を受け入れる方法を知っていますか?

私ができるように:

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

どうすれば自分の職務でそれを行うことができますか?渡された無限大の引数をどのように処理できますか?

どうやってやっているの?

28
user849137

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);
    }
}

しかし、それを使用する前に、あなた本当にが不定のパラメータを持ちたいかどうかを考えてください。配列では不十分でしょうか?

54
Waleed Khan

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

34
Marcel Burkhard

func_get_args()を使用できます。引数の配列が返されます。

function work_with_arguments() {
    echo implode(", ", func_get_args());
}

work_with_arguments("Hello", "World");
//Outputs: Hello, World
2
Madara Uchiha

関数内でfunc_get_args()を呼び出すと、PHPに渡された引数の配列が返されます。

1
Lucas Green