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