PHP: Определить функцию с переменным числом параметров?

Есть ли способ определить функцию в PHP, которая позволяет вам определить переменное количество параметров?

на языке, с которым я больше знаком, это так:

function myFunction(...rest){ /* rest == array of params */ return rest.length; } myFunction("foo","bar"); // returns 2; 

Благодаря!

Related of "PHP: Определить функцию с переменным числом параметров?"

Да. Используйте func_num_args() и func_get_arg() чтобы получить аргументы:

 <?php function dynamic_args() { echo "Number of arguments: " . func_num_args() . "<br />"; for($i = 0 ; $i < func_num_args(); $i++) { echo "Argument $i = " . func_get_arg($i) . "<br />"; } } dynamic_args("a", "b", "c", "d", "e"); ?> 

В PHP 5.6+ теперь вы можете использовать вариативные функции :

 <?php function dynamic_args(...$args) { echo "Number of arguments: " . count($args) . "<br />"; foreach ($args as $arg) { echo $arg . "<br />"; } } dynamic_args("a", "b", "c", "d", "e"); ?> 

Вы можете принять переменное количество аргументов для любой функции, если достаточно заполнить все объявленные аргументы.

 <?php function test ($a, $b) { } test(3); // error test(4, 5); // ok test(6,7,8,9) // ok ?> 

Чтобы получить доступ к дополнительным func_get_args() аргументам, переданным в test() , вы используете функции func_get_args() , func_num_args() и func_get_arg($i) :

 <?php // Requires at least one param, $arg1 function test($arg1) { // func_get_args() returns all arguments passed, in order. $args = func_get_args(); // func_num_args() returns the number of arguments assert(count($args) == func_num_args()); // func_get_arg($n) returns the n'th argument, and the arguments returned by // these functions always include those named explicitly, $arg1 in this case assert(func_get_arg(0) == $arg1); echo func_num_args(), "\n"; echo implode(" & ", $args), "\n"; } test(1,2,3); // echo "1 & 2 & 3" ?> 

или просто

 function printArgs() { foreach (func_get_args () as $arg){ echo $arg; } } printArgs("1 ", "2 ", "three "); 

выходы 1 2 three

Хотя этот вопрос очень старый: на самом деле в PHP 5.6+ вы можете точно написать то, что вы написали: D

Мне нравится использовать Javascript-esque-подход с моими параметрами PHP. Это позволяет лучше настроить «параметры» и их значения по умолчанию (на которые я буду смотреть мгновенно). Например, предположим, что у вас есть функция, которая возвращает диапазон раз в массиве. Параметр 1 – это время начала, параметр 2 – время окончания, параметр 3 – временной интервал, и любая опция после этого является необязательной (например, «формат» => «24-часовой», «include_seconds» => TRUE и т. Д. ).

Я бы определил такую ​​функцию:

 function returnTimeInterval($startTime, $endTime, $interval, $options = array()) { // the first thing to do is merge options in with our defaults $options = array_merge(array( "format" => "24-hour", "include_seconds => TRUE // etc. ), $options); 

Это позволяет устанавливать значения по умолчанию в пределах функции, которая может быть переопределена, что довольно круто. Конечно, вам нужно позаботиться о том, чтобы странные, неиспользованные опции не были переданы, но я оставлю это вам. 🙂

Я бы посоветовал вам передать массив в вашу функцию, таким образом вы можете иметь столько разных параметров, которые хранятся в этом массиве. Есть много операций, которые вы можете сделать в массиве, когда он находится в функции, чтобы получить нужную информацию, в которой вы нуждаетесь.

 $array = array(); $array[0] = "a"; $array[1] = 1; myFunction($array);