Может ли функция PHP принимать неограниченное количество параметров?

В PHP есть такие функции, как unset() которые поддерживают любое количество параметров, которые мы бросаем на них.

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

Есть идеи как это сделать?

В PHP используйте функцию func_get_args для получения всех переданных аргументов.

 <?php function myfunc(){ $args = func_get_args(); foreach ($args as $arg) echo $arg."/n"; } myfunc('hello', 'world', '.'); ?> 

Альтернативой является передача массива переменных в вашу функцию, поэтому вам не нужно работать с такими вещами, как $arg[2]; и вместо этого может использовать $args['myvar']; или повторите, какой порядок передается. Он также бесконечно расширяется, что означает, что вы можете добавлять новые переменные позже, не изменяя то, что вы уже закодировали.

 <?php function myfunc($args){ while(list($var, $value)=each($args)) echo $var.' '.$value."/n"; } myfunc(array('first'=>'hello', 'second'=>'world', '.')); ?> 

Вы можете использовать эти функции из области действия функции:

  • func_get_arg ()
  • func_get_args ()
  • func_num_args ()

Некоторые примеры:

 foreach (func_get_args() as $arg) { // ... } 

 for ($i = 0, $total = func_num_args(); $i < $total; $i++) { $arg = func_get_arg($i); } 

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

У вас будет 3 функции в вашем распоряжении, чтобы работать с этим. Иметь объявление функции:

 function foo() { /* Code here */ } 

Функции, которые вы можете использовать, следующие

func_num_args () Возвращает количество аргументов, переданных массиву

func_get_arg ($ index) Возвращает значение аргумента по указанному индексу

func_get_args () Возвращает массив аргументов.

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

если у вас есть PHP 5.6+, то вы можете использовать

 function sum(...$numbers) 

functions.variable-Arg-лист

Здесь вы можете узнать больше о передаче параметров в виде массивов аргументов в функцию, используя 3 вышеупомянутые функции args. Я просто собираю вещи в PHP git , поэтому вы можете много узнать о функциях PHP и трюках классов. Примеры являются информативными, описательными и проверенными. Нет foo, двусмысленность бара.

Если вы используете PHP 5.6 или более позднюю версию, списки аргументов могут включать ... токен, чтобы обозначить, что функция принимает переменное количество аргументов. Аргументы будут переданы в заданную переменную в виде массива; Просто используя ... вы можете получить доступ к неограниченным переменным аргументам.

например:

 <?php function sum(...$numbers) { $sum = 0; foreach ($numbers as $n) { $sum += $n; } return $sum ; } echo sum(1, 2, 3, 4, 5); ?> 

Если вы используете PHP версию <= 5.5, вы можете получить неограниченный параметр, используя функции func_num_args () , func_get_arg () и func_get_args () .

php7 обеспечивает простой способ passing and catching unlimited parameters функции с помощью эллипсов прямо перед именем параметра в определении функции. Ниже приведен пример, демонстрирующий то же самое:

 <?php function print_names(...$names){ foreach($names AS $name) echo "The name is: <b>$name</b>.\n"; } print_names( "Superman", "Ironman", "Spiderman", "HULK", "Thor", "Captain America", "Batman" ); 

Кредиты: http://dwellupper.io/post/5/passing-unlimited-parameters-to-functions-in-php7