Соколова В. В. Функции в РНР. Соколова В. В. Лаб 4 Определение функции Функцией называется фрагмент программного кода, обладающий уникальным именем и.

Презентация:



Advertisements
Похожие презентации
Тема: массивы в PHP Изучить возможности языка PHP при решении задач, требующих использования массивов. Рассмотреть примеры использования массивов при создании.
Advertisements

Тема: Управление потоком в PHP Изучить возможности языка PHP при решении задач, требующих использования условного оператора. Рассмотреть примеры управления.
Объектно-ориентированный язык программирования. Переменная - эта поименованная ячейка памяти, хранящая какое-либо одно значение (одно число, один фрагмент.
Переменные и операторы УРОК 2. Переменные ПЕРЕМЕННАЯ – ?... контейнер для хранения данных. Переменная имеет имя – это….? последовательность букв, цифр.
Теперь, когда вы постигли азы программирования, будем учиться писать программы, которые позволяют вести диалог между компьютером и человеком (пользователем).
Понятие подпрограммы Стандартные процедуры и функции.
Процедуры и функции Вербицкая Ольга Владимировна, Заозерная школа 16.
Подпрограммы Лекция 7. Ломаско Павел Сергеевич16 декабря 2013 г.
Процедуры и функции в Паскале. Рекурсия. Подпрограммы Часто в задаче требуется повторить определенную последовательность операторов в разных частях программы.
Лекция 4 Программирование на Паскале. Элементы языка Турбо Паскаль 7.0. Типы данных. Управляющие конструкции.
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 5.
Лекция 7. Структура языка С/С++. Операторы ветвления: условный оператор if. Полное ветвление. Неполное ветвление. Оператор множественного выбора switch.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Подпрограммы 1.Принцип модульности 2.Область действия переменных 3.Параметры подпрограмм 4.Модули.
Ключевая тема этого задания ЕГЭ – использование вложенных условных операторов, причем в тексте задания фрагмент программы обычно записан без отступов «лесенкой»
Работа с файлами Сазонов Д.О. ПМиЭММ Часть 2. Тема занятия: Работа с файлами через потоки Для реализации файлового ввода/вывода, необходимо включить в.
Циклы в C++. Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. В этом уроке мы научимся программировать.
Лекция 9 Функции. Массивы-параметры функции Передача массива в функцию Пример: void array_enter(int a[], int size) { int i; for (i = 0; i < size; i++)
Тема 5. Основы современной технологии программирования Программирование в средах современных информационных систем. Интегрированные системы разработки.
При решении многих задач приходится обрабатывать большое количество однотипных данных. Для хранения этих данных пришлось бы вводить большое количество.
Транксрипт:

Соколова В. В. Функции в РНР

Соколова В. В. Лаб 4 Определение функции Функцией называется фрагмент программного кода, обладающий уникальным именем и предназначенный для решения конкретной задачи. Функция в PHP вызывается по имени в разных частях программы, что позволяет многократно выполнять фрагмент с указанным именем. Преимущество такого решения заключается в том, что блок кода пишется всего один раз, а затем легко модифицируется по мере необходимости. Функции могут создаваться в любой части программы РНР, однако по соображениям структурной организации кода удобнее разместить все функции, используемые сценарием, в самом начале сценарного файла. Существует и другой способ, заметно повышающий эффективность программирования и способствующий многократному использованию кода, – выделение функций в отдельный файл (называемый библиотекой). Библиотеки удобны тем, что их функции можно использовать в разных приложениях, не создавая лишних копий и не рискуя допустить ошибки в процессе копирования.

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

Соколова В. В. Лаб 4 Пример простой функции Рассмотрим пример использования функции: нужно создать функцию для вывода лицензионной информации на веб-странице: function display_copyright() { print "Copyright &copy PHP Recipes. All Rights Reserved."; } Если веб-сайт состоит из нескольких страниц, достаточно вызвать эту функцию в конце каждой страницы – и не придется заново переписывать один и тот же текст, а когда наступит 2002 год, одно простое изменение текста, выводимого этой функцией, приведет к автоматическому обновлению всех страниц. Если бы не преимущества функционального программирования, пришлось бы вручную редактировать все страницы, на которых выводится данная информация.

Соколова В. В. Лаб 4 Пример функции с параметром Рассмотрим разновидность функции display_copyright(), которой при вызове передается параметр. Предположим, пользователь отвечает за администрирование нескольких веб- сайтов, каждому из которых присвоено отдельное имя. На каждом сайте имеется собственный административный сценарий с несколькими переменными, относящимися к этому сайту; к их числу принадлежит переменная $site_name с именем сайта. В этом случае функцию display_copyright() можно записать следующим образом: function display_copyright($site_name) { print "Copyright &copy $site_name. All Rights Reserved."; } Переменная $site_name, значение которой присваивается за пределами display_copyright(), передается функции в качестве параметра. Переданное значение можно использовать и модифицировать в любом месте функции, однако любые изменения будут действовать лишь внутри этой функции. Однако, специальные ключевые слова позволяют сделать так, чтобы изменения параметров распространялись и за пределы display_copyright().

Соколова В. В. Лаб 4 Вложенные функции Функции можно вызывать внутри других функций, что увеличивает степень модульности приложения и упрощает сопровождение программы. В примере, описанном выше, можно полностью избавиться от необходимости модификации даты. Для этого достаточно включить в display_copyright() вызов стандартной функции РНР date( ): function display_copyright($site_name) { print "Copyright &copy". date("Y"). "$site_name. All Rights Reserved."; } Параметр Y функции date( ) указывает, что возвращаемое значение представляет собой текущий год, отформатированный в виде четырех цифр. Если системная дата установлена правильно, РНР при каждом выполнении сценария будет выводить год. Также допускается объявление функций внутри других функций. Тем не менее, вложенное объявление еще не делает функцию «защищенной», то есть не ограничивает возможность ее вызова той функцией, в которой она была объявлена. Более того, вложенная функция не наследует параметров родительской функции; параметры должны передаваться ей точно так же, как и любой другой функции. Хотя вложенные функции не защищены от вызова из других точек сценария, они не могут вызываться до вызова своей родительской функции. При попытке вызвать вложенную функцию раньше вызова родительской функции выводится сообщение об ошибке.

Соколова В. В. Лаб 4 Пример вложенных функций function display_footer($site_name) { function display_copyright($site_name) { print "Copyright &сору". date("Y"). "$site_name. All Rights Reserved."; } print " home | news | events ; tutorials | about | contact us "; display_copyright($site_name); } print " "; $site_name = "PHP Recipes"; display_footer($site_name); display_copyright($site_name); // Сценарий выводит следующий результат: home | news | events tutorials | about | contact us Copyright © PHP Recipes. All Rights Reserved.

Соколова В. В. Лаб 4 Возврат значений из функции По завершении работы функции часто бывает полезно вернуть некоторое значение, для чего результат вызова функции обычно присваивается некоторой переменной. Функции могут возвращать значения любых типов, в том числе массивы и списки. Пример: функция calculate_cost( ) вычисляет налог с заданной суммы и возвращает общую сумму вместе с налогом. Краткое описание алгоритма расчетов: 1. Перед вызовом функции задать значения переменных: $price (цена товара) и $tax (налоговая ставка). 2. Объявить функцию calculate_cost( ). При вызове функция получает два параметра: налоговую ставку и цену товара. 3. Вычислить цену с учетом налога и вернуть ее командой return. 4. Вызвать calculate_cost() и присвоить значение, возвращенное функцией, переменной $total_cost. 5. Вывести соответствующее сообщение.

Соколова В. В. Лаб 4 Пример функции для вычисления налога $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

Соколова В. В. Лаб 4 Возврат значений из функции Существует и другой способ использования возвращаемых значений, при котором вызов функции включается прямо в условную/циклическую команду. Пример функции, в которой сумма счета пользователя сравнивается с предельным размером кредита. Краткое описание алгоритма расчетов: 1. Объявить функцию check_limit( ), которая при вызове получает два параметра. Первый параметр, $total_cost, определяет общую сумму счета, накопленную пользователем до настоящего момента. Второй параметр, $credit_limit, определяет максимальную сумму, которую может потратить пользователь. 2. Если накопленная сумма счета превышает предельный размер кредита, функция возвращает ложное значение ( 0 ). 3. Если условие команды if оказывается ложным, работа функции еще не завершена. В этом случае общая сумма не превышает предельного размера кредита, поэтому функция должна вернуть логическую истину. 4. Вызвать функцию check_limit( ) в условии команды if. Проверить, какое значение было возвращено при вызове – истинное или ложное. В зависимости от результата проверки выполняется то или иное действие. 5. Если при вызове check_limit( ) было получено значение TRUE, предлагаем пользователю продолжить покупку. В противном случае, пользователь информируется о превышении суммы кредита.

Соколова В. В. Лаб 4 Пример функции для сравнения значений переменных $cost = ; $limit = ; function check_limit($total_cost, $credit_limit) { if ($total_cost > $credit_limit): return 0; endif; return 1; } if (check_limit($cost, $limit)): print "Покупка возможна"; else: print "Сумма покупки должна быть менее "."$limit"."!"; endif; // При выполнении кода будет выведено сообщение об ошибке, поскольку значение $cost превышает $limit: Сумма покупки должна быть менее 1000!

Соколова В. В. Лаб 4 Возврат значений из функции Функция также может возвращать сразу несколько значений при помощи списка. Пример функции, которая бы возвращала три лучших года для указанного сорта напитка. Краткое описание алгоритма: 1. Объявить функцию best_years( ), вызываемую с одним параметром. Параметр $label определяет сорт напитка, для которого пользователь хотел бы узнать три рекомендуемых года. 2. Объявить два массива, $merlot и $zinfandel. В каждом массиве хранится три рекомендуемых года для соответствующего сорта. 3. Написать команду return, которая бы использовала особые возможности переменных. Выражение $$label сначала интерпретирует переменную $label, а затем интерпретирует полученное значение как имя другой переменной. В настоящем примере массив merlot возвращается в виде списка, и каждый возвращаемый год занимает свою позицию в списке, для которого вызывалась функция. 4. Вывести сообщение с информацией о рекомендуемых годах.

Соколова В. В. Лаб 4 Возвращение функцией нескольких величин // Сорт напитка, для которого выводятся лучшие годы $label = "merlot"; // Функция использует массивы и "переменную в переменной" для возвращения нескольких значений. function best_years($label) { $merlot = array("1987", "1983", "1977"); $zinfandel = array("1992", "1990", "1989"); return $$label; } // Функция list( ) используется для получения возвращаемых значений. list ($yr_one, $yr_two, $yr_three) = best_years($label); print "$label had three particularly remarkable years: $yr_one, $yr_two and $yr_three."; // Программа выводит следующий результат: merlot has three particularly remarkable years: 1987, 1983 and 1977.

Соколова В. В. Лаб 4 Рекурсивные функции Рекурсивная функция – функция, которая многократно вызывает сама себя, пока не будет выполнено некоторое условие. Особенно часто они используются при выполнении повторяющихся действий – например, при поиске в файлах/массивах и построении графических изображений (например, фракталов). Пример рекурсивной функции, которая суммирует все целые числа от 1 до 10. function summation ($count) { if ($count != 0) : return $count + summation($count-1); endif; } $sum = summation(10); print "Summation = $sum"; // Результат вычислений: Summation = 55. Если функция вызывается достаточно часто, рекурсия делает программу более эффективной. Тем не менее, при использовании рекурсии необходима осторожность, поскольку ошибки могут привести к зацикливанию программы.

Соколова В. В. Лаб 4 Функции-переменные Функции-переменные (variable functions) – динамические вызовы функций, имена которых определяются во время выполнения программы. Они значительно сокращают объем и сложность программного кода, а также часто снимают необходимость в условных командах if. Вызов функции-переменной представляет собой имя переменной, за которым следует пара круглых скобок. В круглых скобках могут перечисляться параметры (однако присутствие параметров не обязательно). Обобщенный синтаксис функции-переменной: $имя_функции( ); Пример программы, которая выводит разную информацию (приветствие) в зависимости от языка, выбранного пользователем. Краткое описание алгоритма : 1. Создать сообщение для итальянского языка в функции с именем italian. 2. Создать сообщение для английского языка в функции с именем english. 3. Передать информацию о выбранном языке в сценарий, присвоив значение переменной $language. Переменная $language используется для выполнения функции-переменной (в приведенном примере – italian ()).

Соколова В. В. Лаб 4 Пример функции-переменной // Приветствие на итальянском языке function italian( ) { " print "Benvenuti al PHP Recipes."; } // Приветствие на английском языке function english( ) { print "Welcome to PHP Recipes."; } // Выбрать итальянский язык $language = "italian": // Выполнить функцию-переменную $language( ); Листинг демонстрирует интересную концепцию функций-переменных и наглядно показывает, что функции-переменные способствуют уменьшению объема программного кода. Если бы не эта возможность, функцию пришлось бы выбирать командой if или switch, что привело бы к заметному увеличению объема программного кода и риску появления дополнительных ошибок при кодировании.

Соколова В. В. Лаб 4 Построение библиотек функций Библиотеки функций – одно из самых эффективных средств экономии времени при построении приложений. Например, существует серия функций для сортировки массива. Вероятно, эти функции будут неоднократно использоваться в разных приложениях. Вместо того чтобы постоянно переписывать эти функции в новый сценарий или копировать их через текстовый буфер, гораздо удобнее разместить все функции сортировки в отдельном файле и присвоить ему легко узнаваемое имя (например, array_sorting.inc). Библиотека array_sorting.inc служит накопителем для всех функций сортировки. Это удобно, поскольку функции фактически группируются по своему назначению и при необходимости можно легко найти нужную функцию. Как видно из кода, в начало библиотеки обычно включается заголовок из нескольких строк комментария, чтобы при открытии файла библиотеки можно было сразу получить краткую сводку его содержимого.

Соколова В. В. Лаб 4 Построение библиотек функций После создания собственной библиотеки функций можно включить ее в сценарий при помощи команд РНР include( ) и require( ), в результате чего все функции библиотеки становятся доступными. В общем виде синтаксис этих команд выглядит так: include(путь/имя_файла); require(путь/имя_файла); Также существует альтернативный вариант, где путь определяет относительный или абсолютный путь к файлу: include "путь/имя_файла"; require "путь/имя_файла";

Соколова В. В. Лаб 4 Пример включения библиотеки в сценарий // Предполагается, что библиотека 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);

Соколова В. В. Лаб 4 Файловые компоненты (шаблоны) Шаблоном называется часть веб-документа, которую нужно использовать в нескольких страницах. С увеличением масштабов сайта значение шаблонов возрастает, поскольку они позволяют легко и быстро проводить модификации на уровне целого сайта. Как правило, общие фрагменты содержания/кода (то есть шаблоны) сохраняются в отдельных файлах. При построении веб-документа нужно добавить эти файлы в соответствующие места страницы. В РНР существуют четыре функции для включения файлов в веб-сценарии: 1. include( ); 2. include_once( ); 3. require( ); 4. require_once( ).

Соколова В. В. Лаб 4 Функция include( ) Функция include( ) включает содержимое файла в сценарий во время исполнения программы. Синтаксис функции: include (file файл) Данную функцию можно выполнять условно. Если функция includeO используется в условной команде, то она должна быть заключена в фигурные скобки или в альтернативные ограничители. Например, если вызов функции включен в блок команды if, то файл включается в программу лишь в том случае, если условие if истинно. Неправильное использование include( ): if (some_conditional) include ('text91a.txt'); else include ('text91b.txt'); Правильное использование include( ): if (some_conditional) : include ('text91a.txt'); else: include ('text91b.txt'); endif; Весь код РНР во включаемом файле обязательно заключается в теги РНР. Не стоит полагать, что простое сохранение команды РНР в файле обеспечит ее правильную обработку: print "this is an invalid include file"; Вместо этого необходимо заключить команду в соответствующие теги, как показывает следующий пример:

Соколова В. В. Лаб 4 Функция include_once( ) Функция include_once( ) делает то же, что и include( ), за одним исключением: прежде чем включать файл в программу, она проверяет, не был ли он включен ранее. Если файл уже был включен, вызов include_once( ) игнорируется, а если нет – происходит стандартное включение файла. Во всем остальном include_once( ) ничем не отличается от include( ). Синтаксис функции: include_once (file файл)

Соколова В. В. Лаб 4 Функция require( ) Функция require( ) также включает шаблон в тот файл, в котором находится вызов require( ), но файл, определяемый параметром require( ), включается в сценарий независимо от местонахождения require( ) в сценарии. Например, при вызове requirе( ) в блоке if при ложном условии файл все равно будет включен в сценарий! Синтаксис функции: require (file файл) Во многих ситуациях бывает удобно создать файл с переменными и другой информацией, которая используется в масштабах сайта, и затем подключать его по мере необходимости. Пример инициализационного файла init.tpl : Использование файла init.tpl:

Соколова В. В. Лаб 4 Функция require_once( ) С увеличением размеров сайта может оказаться, что некоторые файлы включаются в сценарий по несколько раз. Иногда это не вызывает проблем, но в некоторых случаях повторное включение файла приводит к сбросу значений изменившихся переменных. Если во включаемом файле определяются функции, могут возникнуть конфликты имен. Функция require_once( ) гарантирует, что файл будет включаться в сценарий всего один раз. После вызова requirе_оnсе( ) все дальнейшие попытки включения того же файла игнорируются. Синтаксис функции: require_once(file файл) Если не считать дополнительной проверки, в остальном эта функция аналогична require( ).