145.00K
Category: programmingprogramming

Мировые информационные ресурсы. Лекция 5. Функциональное программирование в РНР

1.

Мировые информационные ресурсы
Лекция 5. Функциональное
программирование в РНР

2.

Определение функции
Функции могут создаваться
1. в любом месте программы РНР (как правило, в
самом начале файла).
2 выделены в отдельный файл, называемый
библиотекой. Библиотеки удобны тем, что их функции
можно использовать в разных приложениях, не
создавая лишних копий и не рискуя допустить ошибки
в процессе копирования.
2

3.

Определение функции
Определение функции обычно состоит из трех частей:
имени функции;
круглых скобок, в которых перечисляются необязательные
входные параметры, разделенные запятыми;
тела функции, заключенного в фигурные скобки.
Обобщенный синтаксис функции:
function имя_функции ([$параметр1, $параметр2, ....
$параметрn])
{
тело функции
}
РНР не проверяет аргументы на соответствие тем типам,
которые должны обрабатываться функцией. Чтобы убедиться в
том, что параметр относится к нужному типу, можно проверить
3
его стандартной функцией gettype( ).

4.

Определение функции
Пример:
function get_sum($var, $var1) {
$sum = $var + $var1;
echo $sum; }
get_sum(5,2); // выводится 7
Передача параметра по ссылке:
function get_sum(&$var) // аргумент передается по ссылке
{
$var = $var + 5;
return$var; }
$new_var = 20;
echo(get_sum($new_var)); // выводится 25
echo("<br>$new_var"); // выводится 25
4

5.

Вложенные функции
Допускается объявление функций внутри других функций.
Вложенные функции не могут вызываться до вызова своей
родительской функции.
Пример:
function display_footer($site_name) {
function display_copyright($site_name) {
print "Copyright &сору". date("Y"). $site_name. "All Rights Reserved";
}
print "<center>";
print "<a href = \"\">Главная страница</a> | <a href = \"\">Примеры
программ</a> ";
print "| <a href = \"\">Новости сайта</a><br><a href = \"\">Учебники</a> ";
print "| <a href = \"\">О проекте</a> | <a href = \"\">Контакты</a><br>";
display_copyright($site_name);
print "</center>";
}
5

6.

Вложенные функции
$site_name = "Программирование на PHP";
display_footer($site_name);
display_copyright($site_name);
//display_copyright( ) можно вызвать и за пределами
display_footer( ).
Результат:
Главная страница | Примеры программ | Новости сайта
Учебники | О проекте | Контакты
Copyright © 2008 Программирование на PHP. All Rights Reserved
6

7.

функции
Функции могут возвращать значения любых типов, в том
числе массивы и списки.
Функции, не возвращающие значений, также называют
процедурами.
Пример:
$price = 24.99;
$tax = .06;
function calculate_cost($tax, $price) {
$sales_tax = $tax;
return $price + ($price * $sales_tax);
}
// возврат значения функцией calculate_cost().
$total_cost = calculate_cost ($tax, $price);
$total_cost = round($total_cost, 2);
print "Total cost: $".$total_cost;# $total_cost = 26.49
7

8.

Вызов функции в условную/циклическую
команду
Пример: сравнение текущей суммы счета пользователя с
предельным размером кредита
$cost = 1456.22;
$limit = 1000.00;
function check_limit($total_cost, $credit_limit)
// $total_cost - общая сумма счета, накопленная пользователем до
настоящего момента.
// $credit_limit - максимальная сумма, которую может потратить
пользователь.
if ($total_cost > $credit_limit): # если накопленная сумма счета
превышает предельный размер кредита
return 0;
endif;
return 1;
}
8

9.

Вызов функции в условную/циклическую
команду
if (check_limit($cost, $limit)) :
print "Продолжить закупки";
else :
print "Ваш кредит превышен, предел $".$limit."!";
endif;
9

10.

Возврат значений при помощи списка
Пример:
// Сорт вина, для которого выводятся лучшие годы
производства
$label = "merlot";
// Функция использует массивы и "переменную в
переменной" для возвращения значений.
function best_years($label) {
$merlot = array("1987", "1983", "1977");
$zinfandel = array("1992", "1990", "1989");
return $$label;
// Выражение $$label сначала интерпретирует переменную
$label,
// затем интерпретирует полученное значение как имя
другой переменной.
}
10

11.

Возврат значений при помощи списка
// Функция list( ) используется получения возвращаемых
значений.
list ($yr_one, $yr_two, $yr_three) = best_years($label);
// Массив merlot возвращается в виде списка,
// каждый возвращаемый год занимает свою позицию в
списке
print "Для сорта $label рекомендуемые годы производства:
$yr_one, $yr_two и $yr_three.";
Результат:
Для сорта merlot рекомендуемые годы производства: 1987,
1983 и 1977.
11

12.

Функции-переменные
динамические вызовы функций, имена которых
определяются во время выполнения программы.
значительно сокращают объем и сложность
программного кода, а также часто снимают
необходимость в условных командах if.
вызов функции-переменной представляет собой
имя переменной, за которым следует пара
круглых скобок. В круглых скобках могут
перечисляться параметры (однако присутствие
параметров не обязательно).
Обобщенный синтаксис функции-переменной:
$имя_функции( );
12

13.

Функции-переменные
Пример: приветственные сообщения для разноязычных
пользователей.
// Создать сообщение для английского языка в функции.
function english( ) {
print "Welcome to PHP site.";}
// Создать сообщение для итальянского языка в функции.
function russian( ) {
print "Добро пожаловать на сайт PHP.";}
// Выбрать русский язык
$language = "russian":
// переменная $language используется для выполнения
функции-переменной.
// Выполнить функцию-переменную
$language( );
13

14.

Построение библиотек функций
Пример:
<?
// Файл: array_sorting.inc
// Назначение: библиотека функций для сортировки массивов.
function merge_sort($array, $tmparray, $right, $left) {
...
function bubble_sort($array, $n) {
...
}
function quicksort ($array, $right, $left) {
...
}
?>
14

15.

Подключение библиотеки
Функция include( )
Синтаксис:
include(путь/имя_файла); или include "путь/имя_файла";
Путь определяет относительный или абсолютный путь к
файлу.
Если функция include() используется в условной команде,
то она должна быть заключена в фигурные скобки или в
альтернативные ограничители.
Функция include_once( )
- делает то же, что и include( ), за одним исключением:
прежде чем включать файл в программу, она проверяет,
не был ли он включен ранее.
Если файл уже был включен, вызов include_once( )
игнорируется, а если нет — происходит стандартное15
включение файла.

16.

Подключение библиотеки
Функция require( )
Синтаксис:
require(путь/имя_файла);
или require "путь/имя_файла";
Путь определяет относительный или абсолютный путь к
файлу.
Функция require_once( )
- гарантирует, что файл будет включаться в сценарий всего
один раз. После вызова requirе_оnсе( ) все дальнейшие
попытки включения того же файла игнорируются.
16

17.

Подключение библиотеки
Различие между функциями require( ) и
include( )
Файл, определяемый параметром require( ),
включается в сценарий независимо от
местонахождения require( ) в сценарии.
Например, при вызове requiге( ) в блоке if при
ложном условии файл все равно будет включен в
сценарий.
Если вызов функции include( ) включен в блок
команды if, то файл включается в программу лишь
в том случае, если условие if истинно.
17

18.

Подключение библиотеки
Пример включения библиотеки:
// Предполагается, что библиотека
array_sorting.inc
// находится в одном каталоге со сценарием.
include("array_sorting.inc");
// Теперь можно использовать любые функции из
array_sorting.inc
$some_array = array (50, 42, 35, 46);
// Использовать функцию bubble_sort()
$sorted_array = bubble_sort($some_array, 1);
18

19.

Локальные переменные
Переменная, объявленная внутри функции,
считается локальной; другими словами, на нее
можно ссылаться только в этой функции.
При любом присваивании вне функции будет
использоваться совершенно другая переменная,
которая не имеет ничего общего (кроме имени) с
переменной, объявленной внутри функции.
При выходе из функции, в которой была
объявлена локальная переменная, эта
переменная и ее значение уничтожаются.
19

20.

Локальные переменные
Пример:
$х = 4;
function assignx () {
$х = 0;
print "\$x inside function is $x. <br>";
}
assignx();
print "\$x outside of function is $x. <br>";
Результат:
$х inside function is 0.
$х outside of function is 4.
20

21.

Глобальные переменные
- доступны в любой точке программы.
- чтобы изменить значение глобальной переменной,
необходимо специально объявить ее как глобальную в
соответствующей функции. Для этого перед именем
переменной ставится ключевое слово GLOBAL.
Пример:
$somevar = 15;
function addit() {
GLOBAL $somevar;
$somevar++;
print "Somevar is $somevar"; }
addit();
Вывод: значение $somevar, равное 16.
Без строки GLOBAL $somevar; будет выведено значение211.

22.

Глобальные переменные
Альтернативный способ объявления глобальных
переменных: использование массива РНР $GLOBALS( ).
Пример:
$somevar = 15;
function addit() {
$GLOBALS["somevar"];
$somevar++;
}
addit();
print "Somevar is $somevar";
22

23.

Статические переменные
- сохраняют свое значение при повторном вызове.
- для объявления статической переменной перед ее именем
ставится ключевое слово STATIC:
STATIC $somevar;
Пример:
function keep_track() {
STATIC $count = 0;
$count++;
print $count;
print "<br>";
}
keep_track();
keep_track();
keep_track();
23

24.

Статические переменные
- сохраняют свое значение при повторном вызове.
- для объявления статической переменной перед ее именем
ставится ключевое слово STATIC:
STATIC $somevar;
Пример:
function keep_track() {
STATIC $count = 0;
$count++;
print $count;
print "<br>";
}
keep_track();
keep_track();
keep_track();
Результат:
1
2
3
Статические переменные
удобны при написании
рекурсивных функций.
24
English     Русский Rules