Создание пользовательских функций.

Синтаксис задания функций в PHP.

Функция может быть объявлена в любой части программы ( в пределах операторов <? и ?>), но до места ее использования. Для объявления функций используется синтаксис:

function Имя (аргумент1 [=значение1], . . . ,аргументN [=значениеN])

{

тело функции

}

Объявление функции начинается служебным словом function, затем следует имя функции, после имени - список аргументов в скобках. Тело функции заключается в фигурные скобки и может содержать произвольное количество операторов.

Требования к именам функций:

Т.к. тип возвращаемого значения может быть любым, его (тип) не указывают вовсе. Для передачи результата работы функции в основную программу используется инструкция return. Если функция ничего не возвращает, инструкцию return не указывают. Инструкция return может возвращать все, что угодно, в том числе и массивы.

Пример функции возвращающей массив из 10 случайных чисел:

<?

function GetRand()

{

$LocalArr = array();

mt_srand (time());

for ($i=0; $i<10; $i++)

$LocalArr [ ] = mt_rand(0,100);

return $LocalArr;

}

$A = GetRand();

foreach ($A as $K=>$v) echo "$v";

?>

Описание работы функции: функция создает пустой локальный массив $LocalArr, затем настраивает регенератор случайных чисел на новую последовательность (mt_srand), чтобы при каждом новом запуске программы получалась новая строка. Затем заполняется массив случайными числами и передается в основную программу, где присваивается массиву $A. Цикл foreach выводит значения массива.

Передача параметров функции.

Передача значений.

При объявлении функции нужно указать список параметров, которые могут передаваться функции, например:

function func ($a, $b, $c) { . . . };

При вызове функции func() нужно обязательно указать все три параметра, поскольку они обязательны.

Передача переменных по ссылке.

В PHP есть два вида аргументов функций:

Функция не может изменить параметр - значение, то есть он доступен "только для чтения" - она может его использовать, но не более. В качестве параметра - значения необязательно указывать переменную, можно указать само значение, отсюда название - параметр - значение, например:

function func($a)

{

echo "Параметр = $a\n";

}

$b = 3;

func (3);

func ($b);

Данная функция выведет строку "Параметр - 3" дважды.

В отличии от параметров - значений, параметр -переменные могут быть изменены в процессе работы функции. Здесь уже нельзя передавать значение, нужно обязательно передать переменную. В PHP для объявления параметров - переменных используется механизм передачи переменной по ссылке. Пример передачи переменной по ссылке:

<?

$First = $Second = 5;

function f1 ($f, &$s)

{

echo "Изменяем параметры\n";

$f = 7; $s = 10;

echo "First = $f, Second = $s\n";

}

echo "Значение переменных до вызова функции\n";

echo "First = $First Second = $Second\n";

f1 ($First, $Second);

echo "First = $First Second = $Second\n";

?>

Параметры по умолчанию.

 В PHP функция может возвращать любое значение в зависимости от переданных ей параметров. параметры по умолчанию описываются так:

имя_параметра = значение

Например: function my_func ($x = 10, $y = 5)

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

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

Контроль за количеством переданных параметров по умолчанию осуществляется функциями - func_num_args() и func_get_arg().

Первая возвращает число переданных функций аргументов, а вторая - аргумент с указанным номером. Кроме данных двух функций можно использовать еще одну - func_get_args(), которая возвращает список всех аргументов. Например:

foreach (func_get_args() as $a=>$v)

{

echo "<tr><td>$a</td><td>$v</td></tr>";

}

Пример функции print_str, которая выводит переданные ей строки в виде таблицы HTML:

<?

function print_str()

{

echo "<table border=1 width=100%>";

echo "<tr><td bgcolor=blue><font color=white>Номер</font></td>";

echo "<td bgcolor=blue><font color=white>Параметр</font></td>";

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

{

echo "<tr><td>$i</td><td>" .func_get_arg($i) . "</td></tr>";

}

echo "</table>";

}

print_str ("Первый", "Второй", "Третий", "Четвертый");

?>

 

Локальные и глобальные переменные.

Локальные переменные доступны только в функции, а глобальные во всей программе. Они доступны всем функциям.

Пример использования глобальных и локальных переменных:

<?

$i = 10;

$g = 7;

function f1 ()

{

$x = 5;

$i = 0;

global $g;

echo "g = $g\n";

echo "i = $i\n";

}

f1();

echo "$x\n";

?>

Переменные $i и $g - глобальные, они доступны во всей программе. Для передачи глобальных переменных в функцию используется инструкция global:

global список переменных

Если не выполнить эту инструкцию, функция не получит доступ к переменной $g. В данном примере использованы две переменные $i: одна - глобальная, другая - локальная ( в теле функции).

В функции используется локальная переменная, однако, если объявить переменную глобальной:

global $g, $i;

то будет использоваться значение глобальной переменной.

Статические переменные.

Кроме глобальных и локальных переменных, существуют переменные - статические. Если в теле функции объявлена статическая переменная, то компилятор не будет ее удалять после завершения работы функции. Например:

<?

function f1() { static $x; $x++; echo "$x";}

for ($i=0; $i++<5;) f1();

?>

Этот сценарий выведет строку 1 2 3 4 5 . Если удалить инструкцию static, то будет выведена строка 1 1 1 1 1, потому что переменная $x будет удаляться при завершении работы функции и обнуляться при каждом вызове. Т.к. переменная $x инкрементируется сразу после обнуления, а потом выводится, поэтому в результате 1 1 1 1 1, а не  0 0 0 0 0. Статические переменные не являются элементами $GLOBALS.

Рекурсия.

Рекурсией называется вызов функции самой на себя. Такой вызов называется рекурсивным. Рекурсия бывает прямая и обратная.

Пример прямой рекурсии:

<?

function fact ($x)

{

if ($x==0) return 1;

else return $x*fact ($x-1);

}

echo fact (7);

?>

Функция fact() вычисляет факториал x!. Функция fact()  в своем теле вызывает саму себя - это и есть прямая рекурсия. Непрямая рекурсия возникает, когда первая функция вызывает вторую, а вторая - первую.

 

 

 

Hosted by uCoz