Привет, Гость!
home login register
[+] Купить Рекламу
Хостинг для тебя! Заходи не пожалеешь
Что мы делаем полезного на официальном сайте WAP-поддержки? Подробно ...
Вступайте в нашу группу ВКОНТАКТЕ
Поздравляем, новичка с ID:1000
Как самомусделать QR-код
IT новости: в Windows новая опасная уязвимость
Проблемы восприятия IT
Как подтвердить авторство в Google

Учебник PHP #4
<< 1 2 3
функция вызывается достаточно часто, рекурсия делает программу более эффективной. Тем не менее, при использовании рекурсии необходима осторожность, поскольку ошибки могут привести к зацикливанию программы.

Функции-переменные

Одной из интересных возможностей РНР являются функции-переменные (variable functions), то есть динамические вызовы функций, имена которых определяются во время выполнения программы. Хотя в большинстве web-приложений можно обойтись и без функций-переменных, они значительно сокращают объем и сложность программного кода, а также часто снимают необходимость в условных командах if.

Вызов функции-переменной представляет собой имя переменной, за которым следует пара круглых скобок. В круглых скобках могут перечисляться параметры (однако присутствие параметров не обязательно). Обобщенный синтаксис функции-переменной:

$имя_функции( );

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

Создать сообщение для итальянского языка в функции с именем italian.
Создать сообщение для английского языка в функции с именем english.
Передать информацию о выбранном языке в сценарий, присвоив значение переменной $language.

Переменная $language используется для выполнения функции-переменной (в приведенном примере — italian()).

Листинг 4.6. Выбор функции в зависимости от пользовательского ввода

// Приветствие на итальянском языке, function italian( ) {

" print "Benvenuti al PHP Recipes.";

}

// Приветствие на английском языке

function english( ) {

print "Welcome to PHP Recipes.";

}

// Выбрать итальянский язык

$language = "italian":

// Выполнить функцию-переменную

$language( );

Листинг 4.6 демонстрирует интересную концепцию функций-переменных и наглядно показывает, что функции-переменные способствуют уменьшению объема программного кода. Если бы не эта возможность, функцию пришлось бы выбирать командой if или switch; это привело бы к заметному увеличению объема программного кода и риску появления дополнительных ошибок при кодировании.

Построение библиотек функций

Библиотеки функций — одно из самых эффективных средств экономии времени при построении приложений. Предположим, вы написали серию функций для сортировки массива. Вероятно, эти функции будут неоднократно использоваться в разных приложениях. Вместо того чтобы постоянно переписывать эти функции в новый сценарий или копировать их через текстовый буфер, гораздо удобнее разместить все функции сортировки в отдельном файле и присвоить ему легко узнаваемое имя (например, array_sorting.inc). Пример такого файла приведен в листинге 4.7.

Листинг 4.7. Пример библиотеки функций (array_sorting.inc)

<?

// Файл: array_sorting.inc

// Назначение: библиотека функций для сортировки массивов.

// Дата: 17 июля 2000 г.

function merge_sort($array. $tmparray, $right, $left) {

...

function bubble_sort($array. $n) {

...

}

function quicksort ($array. $right. $left) {

...

}

?>

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

include(путь/имя_файла);

require(путь/имя_файла);

Также существует альтернативный вариант:

include "путь/имя_файла";

require "путь/имя_файла";

где путь определяет относительный или абсолютный путь к файлу. Конструкции include( ) и requirе( ) подробно описаны в главе 9. А пока достаточно запомнить, что эти конструкции используются для включения файла непосредственно в сценарий.

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

Листинг 4.8. Включение библиотечного файла (array_sorting.inc) в сценарий

// Предполагается, что библиотека 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);

Итоги

Эта глава посвящена функциям и их применению в РНР. В частности, мы рассмотрели следующие темы:

определение и вызов функций;
вложенные функции;
возврат значений из функции;
рекурсивные функции;
функции-переменные;
построение библиотек функций.

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

Глава 5 посвящена массивам — несомненно, эта тема заметно обогатит ваши познания в РНР. В главе 5 мы познакомимся с основными принципами хранения данных, постепенно продвигаясь к более содержательным и, в конечном счете, более интересным приложениям.
Комментарии (0)
<< 1 2 3
Скачать Java книгу

»php/mysql/pdo/js
В библиотеку

На главную

Сообщество wap разработчиков I HwapCMS официальный сайт поддержки


RSS-лента
Генерация: 0.013 сек.