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




Пример функции


Как водится, сразу начну с примера. Предположим, нам необходимо в программе очень часто находить в массиве-списке наибольший элемент, который в то же время меньше какого-то, наперед заданного числа. А именно, нас интересует его номер в массиве (если такого числа в массиве нет, то номер полагается равным -1). Напишем для этой цели функцию (такое описание называется определением функции, и оно, конечно, должно быть единственным в пределах сценария).

Листинг 11.1. Пример функции

function GetMaxNum($arr, $max="")

{ // проходимся по всем элементам массива

  for($i=0,$n=-1; $i<count($arr); $i++) {

    // если этот элемент нам пока подходит, запоминаем его

    if((!Isset($m) || $arr[$i]>$m) && ($max==="" || $arr[$i]<$max)) {

      // сюда мы попадаем, когда очередной элемент больше текущего,

      // либо же текущего элемента еще не существует (первый проход)

      $m=$arr[$i]; // запоминаем текущий элемент

      $n=$i;       // запоминаем его номер

    }

  }

  return $n;

}

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

echo "Программа...";

function GetMaxNum($arr,$max)

{ ... тело функции ...

}

echo "Программа продолжается!";

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

Итак, мы создали функцию с именем GetMaxNum() и двумя параметрами, первый из которых рассматривается ей как массив, а второй — как вещественное число.

На самом деле на этапе создания функции еще никаких предположений о типах параметров не строится. Однако попробуйте нашей функции вместо массива в первом аргументе передать число — интерпретатор "заругается", как только выполнение дойдет до строчки с $arr[$i], и скажет, что "переменная не является массивом".[E50] 




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