问题
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?
回答1:
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?
回答2:
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
回答3:
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
回答4:
Calling func_get_args() inside of your function will return an array of the arguments passed to PHP.
来源:https://stackoverflow.com/questions/12165002/how-to-work-with-infinity-arguments-in-a-function-like-phps-isset