Уроки PHP - урок 7 - PHP функции и функциональное программирование

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;
?>

Из названия функции уже понятно, что она прибавляет к переменной единицу. А теперь из чего состоит функция:

Имя функции

 

Имя функции задается также как и имя переменной:

  1. Имя функции должно начинаться с буквы или символа подчеркивания "_"
  2. Имя функции может содержать только буквенный-цифровые символы и знак подчеркивания (А-Я, AZ, 0-9, и _)
  3. Имя функции не должно содержать пробелов. Если имя функции более одного слова, она должна быть разделена подчеркиванием 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, в следующих уроках мы более подробно будем изучать этот вид программирования.

Комментарии

Добавить комментарий

Войти, используя Loginza Google Account Yandex Mail.ru Vkontakte Facebook
(If you're a human, don't change the following field)
Your first name.
(If you're a human, don't change the following field)
Your first name.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.

Эта лекция не говорит ничего

Эта лекция не говорит ничего о функциональном программировании. ФП - это функции первого порядка, частичное применение,  каррирование, свёртки и прочее-прочее. То, о чем идет речь в данной статье - это процедурное программирование - императивное программирование на основе использование разрозненных функций в противовес объектно ориентированному подходу.

 

СИ - процедурный язык,

СИ++ - объектно ориентированный.

И ни тот, ни другой не функциональные.

 

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

<?php function

<?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;
?>

В приведённом уроке не объясняется как вместе работают функции и переменные.
То есть, зачем сначала объявлять функцию function myFunction($x),
а потом использовать $z1 = myFunction(1); и тд...
Наверное для тех кто разбирается - это очевидно, но для новичков - нет.
Спасибо вообще за уроки, в остальном всё достаточно доходчиво.

Функция объявляется чтобы не

Функция объявляется чтобы не повторять ранее написанный код:

  $y = -2 * $x + 4;
  return $y;

То есть тоже самое можно написать вот так:

 

$x = 1;
$y = -2 * $x + 4; // эта строка одинаковая
$z1 = $y // операция возвращения результата return $y

$x = 2;
$y = -2 * $x + 4; // эта строка одинаковая
$z2 = $y

$x = 3;
$y = -2 * $x + 4; // эта строка одинаковая
$z3 = $y;

print $z1 . '<br />' . $z2 . '<br />' . $z3;