Слайд 1Мировые информационные ресурсы
Лекция 5. Функциональное программирование в РНР
Слайд 2Определение функции
Функции могут создаваться
1. в любом месте программы РНР
(как правило, в самом начале файла).
2 выделены в отдельный
файл, называемый библиотекой. Библиотеки удобны тем, что их функции можно использовать в разных приложениях, не создавая лишних копий и не рискуя допустить ошибки в процессе копирования.
Слайд 3Определение функции
Определение функции обычно состоит из трех частей:
имени функции;
круглых скобок, в которых перечисляются необязательные входные параметры, разделенные запятыми;
тела функции, заключенного в фигурные скобки.
Обобщенный синтаксис функции:
function имя_функции ([$параметр1, $параметр2, .... $параметрn])
{
тело функции
}
РНР не проверяет аргументы на соответствие тем типам, которые должны обрабатываться функцией. Чтобы убедиться в том, что параметр относится к нужному типу, можно проверить его стандартной функцией 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("
$new_var"); // выводится 25
Слайд 5Вложенные функции
Допускается объявление функций внутри других функций.
Вложенные функции не могут
вызываться до вызова своей родительской функции.
Пример:
function display_footer($site_name) {
function display_copyright($site_name)
{
print "Copyright &сору". date("Y"). $site_name. "All Rights Reserved";
}
print "
";
print "Главная страница | Примеры программ ";
print "| Новости сайта
Учебники ";
print "| О проекте | Контакты
";
display_copyright($site_name);
print "";
}
Слайд 6Вложенные функции
$site_name = "Программирование на PHP";
display_footer($site_name);
display_copyright($site_name);
//display_copyright( ) можно вызвать
и за пределами display_footer( ).
Результат:
Главная страница | Примеры программ
| Новости сайта
Учебники | О проекте | Контакты
Copyright © 2008 Программирование на PHP. All Rights Reserved
Слайд 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
Слайд 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;
}
Слайд 9Вызов функции в условную/циклическую команду
if (check_limit($cost, $limit)) :
print "Продолжить закупки";
else
:
print "Ваш кредит превышен, предел $".$limit."!";
endif;
Слайд 10Возврат значений при помощи списка
Пример:
// Сорт вина, для которого выводятся
лучшие годы производства
$label = "merlot";
// Функция использует массивы и "переменную
в переменной" для возвращения значений.
function best_years($label) {
$merlot = array("1987", "1983", "1977");
$zinfandel = array("1992", "1990", "1989");
return $$label;
// Выражение $$label сначала интерпретирует переменную $label,
// затем интерпретирует полученное значение как имя другой переменной.
}
Слайд 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.
Слайд 12Функции-переменные
динамические вызовы функций, имена которых определяются во время выполнения программы.
значительно
сокращают объем и сложность программного кода, а также часто снимают
необходимость в условных командах if.
вызов функции-переменной представляет собой имя переменной, за которым следует пара круглых скобок. В круглых скобках могут перечисляться параметры (однако присутствие параметров не обязательно).
Обобщенный синтаксис функции-переменной:
$имя_функции( );
Слайд 13Функции-переменные
Пример: приветственные сообщения для разноязычных пользователей.
// Создать сообщение для
английского языка в функции.
function english( ) {
print "Welcome to
PHP site.";}
// Создать сообщение для итальянского языка в функции.
function russian( ) {
print "Добро пожаловать на сайт PHP.";}
// Выбрать русский язык
$language = "russian":
// переменная $language используется для выполнения функции-переменной.
// Выполнить функцию-переменную
$language( );
Слайд 14Построение библиотек функций
Пример:
сортировки массивов.
function merge_sort($array, $tmparray, $right, $left) {
...
function bubble_sort($array, $n) {
...
}
function
quicksort ($array, $right, $left) {
...
}
?>
Слайд 15Подключение библиотеки
Функция include( )
Синтаксис:
include(путь/имя_файла); или include "путь/имя_файла";
Путь определяет относительный
или абсолютный путь к файлу.
Если функция include() используется в условной
команде, то она должна быть заключена в фигурные скобки или в альтернативные ограничители.
Функция include_once( )
- делает то же, что и include( ), за одним исключением: прежде чем включать файл в программу, она проверяет, не был ли он включен ранее.
Если файл уже был включен, вызов include_once( ) игнорируется, а если нет — происходит стандартное включение файла.
Слайд 16Подключение библиотеки
Функция require( )
Синтаксис:
require(путь/имя_файла);
или require "путь/имя_файла";
Путь определяет
относительный или абсолютный путь к файлу.
Функция require_once( )
- гарантирует,
что файл будет включаться в сценарий всего один раз. После вызова requirе_оnсе( ) все дальнейшие попытки включения того же файла игнорируются.
Слайд 17Подключение библиотеки
Различие между функциями require( ) и include( )
Файл,
определяемый параметром require( ), включается в сценарий независимо от местонахождения
require( ) в сценарии.
Например, при вызове requiге( ) в блоке if при ложном условии файл все равно будет включен в сценарий.
Если вызов функции include( ) включен в блок команды if, то файл включается в программу лишь в том случае, если условие if истинно.
Слайд 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);
Слайд 19Локальные переменные
Переменная, объявленная внутри функции, считается локальной; другими словами, на
нее можно ссылаться только в этой функции.
При любом присваивании
вне функции будет использоваться совершенно другая переменная, которая не имеет ничего общего (кроме имени) с переменной, объявленной внутри функции.
При выходе из функции, в которой была объявлена локальная переменная, эта переменная и ее значение уничтожаются.
Слайд 20Локальные переменные
Пример:
$х = 4;
function assignx () {
$х =
0;
print "\$x inside function is $x.
";
}
assignx();
print "\$x outside
of function is $x.
";
Результат:
$х inside function is 0.
$х outside of function is 4.
Слайд 21Глобальные переменные
- доступны в любой точке программы.
- чтобы изменить
значение глобальной переменной, необходимо специально объявить ее как глобальную в
соответствующей функции. Для этого перед именем переменной ставится ключевое слово GLOBAL.
Пример:
$somevar = 15;
function addit() {
GLOBAL $somevar;
$somevar++;
print "Somevar is $somevar"; }
addit();
Вывод: значение $somevar, равное 16.
Без строки GLOBAL $somevar; будет выведено значение 1.
Слайд 22Глобальные переменные
Альтернативный способ объявления глобальных переменных: использование массива РНР $GLOBALS(
).
Пример:
$somevar = 15;
function addit() {
$GLOBALS["somevar"];
$somevar++;
}
addit();
print "Somevar
is $somevar";
Слайд 23Статические переменные
- сохраняют свое значение при повторном вызове.
- для объявления
статической переменной перед ее именем ставится ключевое слово STATIC:
STATIC
$somevar;
Пример:
function keep_track() {
STATIC $count = 0;
$count++;
print $count;
print "
";
}
keep_track();
keep_track();
keep_track();
Слайд 24Статические переменные
- сохраняют свое значение при повторном вызове.
- для объявления
статической переменной перед ее именем ставится ключевое слово STATIC:
STATIC
$somevar;
Пример:
function keep_track() {
STATIC $count = 0;
$count++;
print $count;
print "
";
}
keep_track();
keep_track();
keep_track();
Результат:
1
2
3
Статические переменные удобны при написании рекурсивных функций.