#4. 6 php Функции с переменным количеством аргументов

Все функции, которые были разработаны ранее, имели фиксированное количество аргументов. Но в РНР предусмотрена возможность работы с функциями, которые имеют переменное количество аргументов. Это не то же самое, что использование значений аргументов по умолчанию, речь идет о том, что функция может быть вызвана с разным количеством аргументов, каждый из которых может быть проанализирован при помощи специализированных функций. При этом функция может быть вызвана с таким количеством аргументов, с каким потребуется. Например, требуется разработать функцию, которая отображает конкатенацию всех переданных ей строк. Вызываться эта функция под названием joiner будет, например, следующим образом:

joiner("Без", "паники") ;
joiner("Сегодня", "хорошая", "погода.");
joiner("Просто", "очень", "длинная", "строка.");

Для обработки переменного списка аргументов в РНР предусмотрены следующие три функции:

  • func_num_args Возвращает количество аргументов функции.
  • func_get_arg Возвращает заданный аргумент функции.
  • func_get_args Возвращает все аргументы функции в виде массива.

В следующем примере для реализации функции joiner используются две из этих функций. При помощи функции func_num_args определяется количество аргументов, переданных при данном вызове функции, а при помощи функции func_get_args из аргументов формируется массив, элементы которого последовательно обрабатываются в цикле.

Пример. Переменное число аргументов функции

<HTML>
    <HEAD>
        <TITLE>
            Функции с переменным числом аргументов
        </TITLE>
    </HEAD>
    <BODY>
        <H1>
            Функции с переменным числом аргументов
        </H1>
        <?php
            function joiner()
            {
                $text = " ";
                $arg_list = func_get_args();
                for ($loop_index = 0; $loop_index < func_num_args();
                $loop_index++) {
                    $text .= $arg_list[$loop_index] . " ";
                }
                return $text;
            }
            echo "joiner(\"Без\", \"паники.\") = ", joiner("Без",
            "паники. " ) , "<BR>" ;
            echo "joiner(\"He\", \"стоит\", \"волноваться.\") = ",
            joiner("He", "стоит", "волноваться."), "<BR>";
            echo "joiner(\"Это\", \"совсем\", \"длинная\", 
            \"строка. \") = ", joiner("Это", "совсем", "длинная", "строка."),"<BR>";
        ?>
    </BODY>
</HTML>

На рис.1 представлен результат выполнения этого примера. Видно, что все переданные функции joiner аргументы корректно обработаны.



Рис. 1. Функция с переменным числом аргументов