Уроки PHP - урок 7 - PHP функции и функциональное программирование
Я думаю, что мы уже вплотную приблизились к тому моменту, когда пора.. пора уже и начать программировать. После этого урока вы сможете сказать, что вы программировали на PHP. Довольно часто приходится писать код, который должен повторяться на других страницах, в других .php файлах. Чтобы не дублировать этот код в PHP есть функции.
Функция - это независимая часть кода, которая выполняет некоторые вычисления. Примеры таких функций мы встречали в прошлых уроках:
time() - функция, которая выводит количество секунд с начала эпохи Unix.
print(), echo() - функция, позволяющая выводить html.
floor() - функция, которая от дробного числа возвращает целую часть.
Вы наверно заметили как обозначают функции, с помощью двух скобок (). Получается такая вот общая запись функций: имя_функции(). Собственно правила наименования функции такие же как и правила наименования переменных. Только если для переменных мы пишем знак доллара, то для функций мы не используем знак доллара, а используем скобки.
Из чего состоит функция мы разберем на примере:
<?php function plus_one($x){ //определение функции $x = $x + 1; //тело функции return $x; //возвращаемое значение } $y = 1; $y = plus_one($y); //вызов функции print $y; ?>
Из названия функции уже понятно, что она прибавляет к переменной единицу. А теперь из чего состоит функция:
Имя функции
Имя функции задается также как и имя переменной:
- Имя функции должно начинаться с буквы или символа подчеркивания "_"
- Имя функции может содержать только буквенный-цифровые символы и знак подчеркивания (А-Я, AZ, 0-9, и _)
- Имя функции не должно содержать пробелов. Если имя функции более одного слова, она должна быть разделена подчеркиванием my_function(), или с капитализацией myFunction().
Чтобы определить новую функцию мы используем слово function. Это слово показывает что дальше пойдет имя функции.
Тело функции
Это код, который выполняет функция. В нашем случае это вот эта часть:
function plus_one($x){ $x = $x + 1; //тело функции return $x; //тело функции }
Тело функции мы оборачиваем в фигурные скобки {}.
Возвращаемое значение
Я уже писал "возвращает значение", "возвращаемое значение", а теперь пора рассказать что это значит. Значение которое идет после слова return и есть возвращаемое. Это возвращаемое значение есть результат выполнения кода функции. В нашем примере мы возвращаем значение переменной $x.
Параметры функции
Параметры функции - это переменные или значения, которые мы пишем после имени функции в круглых скобках. В нашем примере мы передаем один параметр $x, но можно передавать и несколько параметров через запятую:
<?php function myFunction($x1, $x2, $x3){ } $y = myFunction($z, 34, 'Привет, Мир!'); ?>
Если при определение функции в параметрах написаны переменные, то это показывает только необходимое количество параметров, которые должны быть указаны при использование функции. Если количество параметров будет не совпадать, то это вызовет ошибку:
<?php function myFunction($x1, $x2, $x3){ } $y = myFunction(34, 'Привет, Мир!'); //неправильный вызов функции вызывает ошибку!!! ?>
Также заметьте, что в определение мы указываем одни имена переменных, которые будут использованы локально, а при вызове функции мы через параметры можем задавать любые значения и переменные.
Давайте разберемся как PHP функции работают на примере простой математической функции, извините за каламбур. Допустим у нас есть функция y=-2x+4, давайте найдем значения функции при разных значениях аргумента x.
<?php function myFunction($x){ $y = -2 * $x + 4; return $y; } $z1 = myFunction(1); $z2 = myFunction(2); $z3 = myFunction(3); print $z1 . '<br />' . $z2 . '<br />' . $z3; ?>
Результатом будет значения -2, 0, 2. Я думаю, что после этого примера вам станет понятно как работают функции.
А теперь давайте еще поговорим о функциональном программирование. Вы наверно уже догадались почему этот вид программирования называется функциональным, правильно, потому что в основе программирования лежат функции, много функции, по десятку в каждом файле. И как же управляться с таким количеством функций, спросите вы. Я отвечу легко. Поясню это на примере.
<?php function incr($x){ $x++; return $x; } function decr($y){ $y--; return $y; } $z = 0; $z = incr($z); $z = incr($z); $z = incr($z); $z = incr($z); $z = decr($z); print $z; ?>
Как описано выше в примере мы 4 раза увеличили на 1 и 1 раз уменьшили на 1. Так что в ответе у нас 3. А теперь переместим функции ниже самого примера.
<?php $z = 0; $z = incr($z); $z = incr($z); $z = incr($z); $z = incr($z); $z = decr($z); print $z; function incr($x){ $x++; return $x; } function decr($y){ $y--; return $y; } ?>
Если вы выполните этот код, то ничего не изменится, будет также 3. А все потому что PHP найдет функцию в любом месте где бы она не была определена относительно выполняемого текущего оператора. Но тогда появляется вопрос, а что делать если у меня будет 50 функций, 100 функций, 1000 функций. Ответ просто, разбивать функции по схожему функционалу и складывает по полочкам, то есть в папочки и файлы. Давайте создадим два файла:
decr.php:
<?php function decr($y){ $y--; return $y; }?>
incr.php:
<?php function incr($x){ $x++; return $x; }?>
Определение функций из файла index.php следует удалить, потому что повторное определение функции с одним именем вызывает ошибку. А также если мы вызываем функцию без ее определения, то это тоже вызывает ошибку. Так что будьте внимательнее.
Теперь осталось присоединить файлы с функциями, присоединяем функцией include в файле index.php:
<?php include 'incr.php'; include 'decr.php'; $z = 0; $z = incr($z); $z = incr($z); $z = incr($z); $z = incr($z); $z = decr($z); print $z; ?>
Теперь можно использовать код из incr.php и decr.php не перегружая код в файле index.php. Как видите результат не изменился, все также 3.
Это еще не все возможности функционального программирования на PHP, в следующих уроках мы более подробно будем изучать этот вид программирования.