Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

metoda / Ml_ITIn_2013

.pdf
Скачиваний:
17
Добавлен:
16.03.2016
Размер:
6.66 Mб
Скачать

131

На рис. 3.87 показано использование цикла foreach, а на рис. 3.88 результат.

Рис. 3.87. Использование Foreach для вывода массива. Lab7_1.php

Рис. 3.88. Использование Foreach для вывода массива.

132

Этот цикл работает (рис. 3.87) следующим образом: в порядке появления в коде программы элементов массива $languages, переменным $key и $value присваюваются соответственно индекс и значение очередного элемента, и выполняется тело цикла.

Если индексы нас не интересуют, цикл можно записать следующим образом: foreach ($languages as $value).

Т. е. в программе рис. 3.87 произвести следующую замену:

Тогда вывод на экране будет как показано на рис. 3.89.

Рис. 3.89. Использование Foreach для вывода массива.

Задание 3. Конструкции list и each. Lab7_2.php.

В дополнение к уже рассмотренной конструкции array, существует дополняющая ее конструкция list, являющаяся своего рода антиподом array: если последняя используется для создания массива из набора значений, то list, напротив, заполняет перечисленные переменные значениями из массива.

Допустим, у нас есть массив $lang = array('php', 'perl', 'basic'). Тогда конструкция list($a, $b) = $lang присвоит переменной $a значение 'php', а $b - 'perl'. Соответственно, list($a, $b, $c) = $lang дополнительно присвоит $c = 'basic'.

Если бы в массиве $lang был только один элемент, PHP бы выдал замечание об отсутствии второго элемента массива.

133

А если нас интересуют не только значения, но и индексы? Воспользуемся конструкцией each, которая возвращает пары индексзначение.

Рис. 3.90. Использование Foreach для вывода массива. Lab7_2.php.

На первый взгляд может удивить тот факт, что в строках 19-21 переменным присваиваются разные значения, хотя выражения справа от знака присваивания совершенно одинаковые. Дело в том, что у каждого массива есть скрытый указатель текущего элемента. Изначально он указывает на первый элемент. Конструкция each же продвигает указатель на один элемент вперед.

Результат работы кода представленного на рис. 3.90 показан ниже.

Рис. 3.91. Использование Foreach для вывода массива. Lab7_2.php.

Эта особенность each позволяет перебирать массив с помощью обычных циклов while и for. Конечно, ранее рассмотренный цикл foreach

134

удобнее, и стоит предпочесть его, но конструкция с использованием each довольно распространена, и вы можете ее встретить во множестве скриптов в сети.

Ниже (рис. 3.92) показан модифицированный код Lab7_2.php, использующий цикл

Рис. 3.93. Использование While для вывода массива. Lab7_2.php.

Результат модифицированной программы приведенной на рис. 3.93, соответствует рис. 3.91.

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

надо принудительно сбросить с помощью оператора reset: reset($brows). Этот оператор устанавливает указатель текущего элемента в начало массива.

Задание 4. Сортировка массива. Lab7_3.php.

Реализовать ввод названий месяцев и отсортировать их в алфавитном порядке.

Исходный код Lab7_3.php показан на рис. 3.93.

135

Рис. 3.93. Ввод и сортировка массива . Lab7_3.php.

В результате работы кода представленного на рис. 3.93 получим (рис. 3.94).

Рис. 3.94. Форма для ввода элементов массива . Lab7_3.php.

Если пользователь заполнит, например, форму (рис. 3.94) информацией вида

(рис. 3.95).

Рис. 3.95. Форма с информацией . Lab7_3.php.

136

Тогда нажатие кнопки приведет к следующему результату (рис.

3.96).

Рис. 3.96. Форма с информацией . Lab7_3.php.

137

Тема №8. Функции в сценариях РНР

Цель работы: Получение навыков по применению функций в PHP при обработке сценариев.

При помощи функций можно создавать компоненты многократного использования, которые легко изменяются при необходимости .

Данная тема посвящена функциям PHP, их определению и применению на практике. Хотя основное внимание в ней уделяется определению и вызову пользовательских функций, необходимо помнить и о том, что в PHP существуют сотни стандартных функций. Стандартные функции работают точно так же, как пользовательские, и обеспечивают заметную экономию времени при создании новых приложений. Обновленный список стандартных функций PHP можно найти по адресу http://www.php.net.

Что такое функция?

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

Определение и вызов функций

Определить новую функцию в PHP несложно. Функции могут создаваться в любой точке программ PHP, однако по соображениям структурной организации кода удобнее разместить все функции, используемые сценарием, в самом начале сценарного файла или конца файла.

Существует и другой способ, заметно повышающий эффективность программирования и способствующий многократному использованию кода, - - выделение функций в отдельный файл (называемый библиотекой). Библиотеки удобны тем, что их функции можно использовать в разных приложениях, не создавая лишних копий и не рискуя допустить ошибки в процессе копирования. Эта тема рассматривается в задании «Построение библиотек функций».

Определение функции обычно состоит из трех частей:

имени функции;

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

138

Обобщенный синтаксис функций PHP выглядит так:

function имя_функции ([$параметр1, ..., $параметрn])

{

тело функции

}

Рис. 3.97. Синтаксис функций .

Имя функции должно подчиняться условиям, приведенным для идентификаторов. После имени функции следуют обязательные круглые скобки, в которые заключается необязательный список входных параметров ($параметр1, $параметр2, ...., $параметрn). Вследствие относительно либеральных принципов определения переменных в PHP указывать тип входных параметров не нужно. Хотя такой подход имеет свои преимущества, следует помнить, что механизм PHP не проверяет аргументы на соответствие тем типам, которые должны обрабатываться функцией. Случайные ошибки в использовании входных параметров могут привести к неожиданным последствиям (чтобы убедиться в том, что параметр относится к нужному типу, можно проверить его стандартной функцией gettype( )). После закрывающей круглой скобки следуют фигурные скобки, в которые заключается программный код, ассоциируемый с именем функции.

Рассмотрим простой пример использования функции. Предположим, вы хотите создать функцию для вывода лицензионной информации на webстранице:

function display_copyright()

{

print "Copyright © 2009 PHP-Powered Recipes. All Rights Reserved.";

}

Рис. 3.98. Простейшая функция .

Если ваш web-сайт состоит из нескольких страниц, достаточно вызвать эту функцию в конце каждой страницы -- и вам не придется заново переписывать один и тот же текст. А когда наступит 2010 год, одно простое изменение текста, выводимого этой функцией, приведет к автоматическому обновлению всех страниц. Если бы не преимущества функционального программирования, вам пришлось бы вручную редактировать все страницы, на которых выводится лицензионная информация.

Рассмотрим разновидность функции display_copyright(), которой при вызове передается параметр. Предположим, вы отвечаете за администрирование нескольких web-сайтов, каждому из которых присвоено отдельное имя. На каждом сайте имеется собственный административный

139

сценарий с несколькими переменными, относящимися к этому сайту; к их числу принадлежит переменная $site_name с именем сайта.

В этом случае функцию display_copyright() можно записать следующим образом:

function display_copyright($site_name)

{

print "Copyright © 2009 $site_name. All Rights Reserved.";

}

Рис. 3.99. Простейшая функция с параметром .

Переменная $site_name, значение которой присваивается за пределами display_copy-right(), передается функции в качестве параметра. Переданное значение можно использовать и модифицировать в любом месте функции, однако любые изменения будут действовать лишь внутри этой функции. Впрочем, специальные ключевые слова позволяют сделать так, чтобы изменения параметров распространялись и за пределы display_copyright(). Эти ключевые слова были представлены в лекции, в общем обзоре области видимости переменных и ее отношения к функциям.

Задание 1. Вложенные функции. Lab8_0_0.php

Функции можно вызывать внутри других функций -- по аналогии с тем, как одна управляющая конструкция (if, while, for и т. д.) может находиться внутри другой. Такая возможность удобна в любых программах, и в больших, и в малых, поскольку она увеличивает степень модульности приложения и упрощает сопровождение программы.

В примере, описанном выше, можно полностью избавиться от необходимости модификации даты. Для этого достаточно включить в display_copyright() вызов стандартной функции PHP date( ):

function display_copyright($site_name)

{

print "Copyright &copy ". date("Y"). "$site_name. All Rights Reserved.";

}

Рис. 3.100. Простейшая функция с параметром и без констант.

Параметр у функции date( ) указывает, что возвращаемое значение представляет собой текущий год, отформатированный в виде четырех цифр. Ниже на рис. 3.101 приведен пример описания и вызова фунцкии в файле Lab8_0_0.php. На рис. 3.102 показан результат вывода на экран работы функции display_copyright.

140

Рис. 3.101. Простейшая функция с параметром и без констант.

Рис. 3.102. Результат работы функции display_copyright. Примечание. Далее, для удобства, на рисунках будет приводиться только PHP код (информация между тегами и ).

Задание 2. Объявление функций внутри других функций. Lab8_0.php

Также допускается объявление функций внутри других функций. Тем не менее, вложенное объявление еще не делает функцию «защищенной», то есть не ограничивает возможность ее вызова той функцией, в которой она была объявлена. Более того, вложенная функция не наследует параметров родительской функции; параметры должны передаваться ей точно так же, как и любой другой функции.

Пример вложенного объявления приведен в листинге рис. 3.103.

Соседние файлы в папке metoda