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

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

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

Любая идея, как это сделать?

Ответы

Ответ 1

В 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', '.'));
?>

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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

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

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

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

Ответ 5

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

Ответ 6

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

function sum(...$numbers) 

functions.variable-arg-list

Ответ 7

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

Ответ 8

Если вы используете 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() функции,

Ответ 9

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