30

You know how PHP's isset() can accept multiple (no limit either) arguments?

Like I can do:

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

How would I be able to do that in my own function? How would I be able to work with infinity arguments passed?

How do they do it?

4 Answers4

55

func_get_args will do what you want:

function infinite_parameters() {
    foreach (func_get_args() as $param) {
        echo "Param is $param" . PHP_EOL;
    }
}

You can also use func_get_arg to get a specific parameter (it's zero-indexed):

function infinite_parameters() {
    echo func_get_arg(2);
}

But be careful to check that you have that parameter:

function infinite_parameters() {
    if (func_num_args() < 3) {
        throw new BadFunctionCallException("Not enough parameters!");
    }
}

You can even mix together func_*_arg and regular parameters:

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

But before using it, think about whether you really want to have indefinite parameters. Would an array not suffice?

Waleed Khan
  • 11,426
  • 6
  • 39
  • 70
  • array is less convinient in use. For example, I often replace isset() with empty(), which accept only one arg. So I often declare function mempty() that can take many arguments but is as convinient, as isset. Nice anwser BTW. – Gall Annonim Jan 04 '18 at 07:49
46

Starting with PHP 5.6 you can use the token "..."

Example:

<?php
function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

echo sum(1, 2, 3, 4);
?>

Source: http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

Marcel Burkhard
  • 3,453
  • 1
  • 29
  • 35
2

You can use func_get_args(), it will return an array of arguments.

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

work_with_arguments("Hello", "World");
//Outputs: Hello, World
Madara's Ghost
  • 172,118
  • 50
  • 264
  • 308
1

Calling func_get_args() inside of your function will return an array of the arguments passed to PHP.

Lucas Green
  • 3,951
  • 22
  • 27