Функции с переменным количеством аргументов
Все функции, которые были разработаны ранее, имели фиксированное количество аргументов. Но в РНР предусмотрена возможность работы с функциями, которые имеют переменное количество аргументов. Это не то же самое, что использование значений аргументов по умолчанию, речь идет о том, что функция может быть вызвана с разным количеством аргументов, каждый из которых может быть проанализирован при помощи специализированных функций. При этом функция может быть вызвана с таким количеством аргументов, с каким потребуется. Например, требуется разработать функцию, которая отображает конкатенацию всех переданных ей строк. Вызываться эта функция под названием joiner будет, например, следующим образом:
joiner("Без", "паники"); joiner("Сегодня", "хорошая", "погода."); joiner("Просто", "очень", "длинная", "строка.");
Для обработки переменного списка аргументов в, РНР предусмотрены следующие три функции:
func_num_args. Возвращает количество аргументов функции.
func_get_arg. Возвращает заданный аргумент функции.
func_get_args. Возвращает все аргументы функции в виде массива.
В примере для реализации функции joiner используются две из этих функций. При помощи функции func_num_args определяется количество аргументов, переданных при данном вызове функции, а при помощи функции func_get_args из аргументов формируется массив, элементы которого последовательно обрабатываются в цикле.
Функции с переменным числом аргументов Функции с переменным числом аргументов
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 ("Без", "паники."), "
"; echo "joiner(\"He\", \"стоит\", \"волноваться.\") = ", joiner("He", "стоит", "волноваться."), "
"; echo "joiner(\"Это\", \"совсем\", \"длинная\", \"строка.\") = ", joiner("Это", "совсем", "длинная", "строка."), "
"; ?>
На рисунке представлен результат выполнения этого примера. Видно, что все переданные функции joiner аргументы корректно обработаны.
Для получения конкретного аргумента функции может быть также использована функция func_get_arg. Ей надо передать номер аргумента (нумерация начинается с 0), и она вернет его значения в качестве результата.
Автор: Стивен Хольцнер. Переводчик: С. Банников