Вы знаете, как PHP isset()
может принимать несколько (без ограничений) аргументов?
Как я могу сделать:
isset($var1,$var2,$var3,$var4,$var5,$var6,$var7,$var8,$var9,$var10,$var11); //etc etc
Как я смогу сделать это в своей собственной функции? Как я могу работать с аргументами бесконечности?
Как они это делают?
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); } }
Но прежде чем использовать его, подумайте, действительно ли вы хотите иметь неопределенные параметры. Не хватит ли массива?
Начиная с 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
Вы можете использовать func_get_args()
, он вернет массив аргументов.
function work_with_arguments() { echo implode(", ", func_get_args()); } work_with_arguments("Hello", "World"); //Outputs: Hello, World
Вызов func_get_args()
внутри вашей функции вернет массив аргументов, переданных PHP.