САМОУЧИТЕЛЬ PHP 4

         

Переменное число параметров


Как мы уже знаем, функция может иметь несколько параметров, заданных по умолчанию. Они перечисляются справа налево, и их всегда фиксированное количество. Однако иногда такая схема нас устроить не может. Например, пусть мы захотели написать функцию в стиле echo, т. е., функцию, которая принимает один или более параметров (сколько именно — неизвестно на этапе определения функции). Пусть она должна вывести эти параметры "лесенкой" — каждый следующий на новой строке с отступом от предыдущего (согласен, пример немного надуман, но все же вполне подходит для иллюстрации функций с переменным количеством параметров). Вот как мы можем это сделать (листинг 11.6):

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

function myecho()

{  for($i=0; $i<func_num_args(); $i++) {

     for($j=0; $j<$i; $j++) echo "&nbsp;"; // выводим отступ

     echo func_get_arg($i)."<br>\n";       // выводим элемент

   }

}

// отображаем строки "лесенкой"

myecho("Меркурий", "Венера", "Земля", "Марс");

Обратите внимание на то, что при описании myecho()

мы указали пустые скобки в качестве списка параметров, словно функция не получает ни одного параметра. На самом деле в PHP при вызове функции можно указывать параметров больше, чем задано в списке аргументов — в этом случае никакие предупреждения не выводятся (но если фактическое число параметров меньше, чем указано в описании, PHP выдаст сообщение об ошибке). "Лишние" параметры как бы игнорируются, в результате пустые скобки в myecho() позволяют нам в действительности передать ей сколько угодно параметров.

Для того чтобы все же иметь доступ к "проигнорированным" параметрам, существуют три встроенные в PHP функции, которые я сейчас подробно опишу.

r    int func_num_args()

Возвращает общее

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

r    mixed func_get_arg(int $num)

Возвращает значение аргумента с номером $num, заданного при вызове функции. Нумерация, как всегда, отсчитывается с нуля.

r    list func_get_args()

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

Перепишем наш пример с применением последней функции (листинг 11.7):

Листинг 11.7. Использование fuct_get_args()

function myecho()

{  foreach(func_get_args() as $v) {

     for($j=0; $j<@$i; $j++) echo "&nbsp;";

     echo "$v<br>\n";

     @$i++;

   }

}

// выводим строки "лесенкой"

myecho("Меркурий", "Венера", "Земля", "Марс");

Мы используем здесь цикл foreach

для перебора аргументов, а также оператор отключения ошибок @, чтобы PHP не "ругался" на то, что переменная $i не определена при первом "обороте"

цикла.




Содержание  Назад  Вперед






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