Привет, Гость!
Учебник PHP #4
функция вызывается достаточно часто, рекурсия делает программу более эффективной. Тем не менее, при использовании рекурсии необходима осторожность, поскольку ошибки могут привести к зацикливанию программы.
Функции-переменные
Одной из интересных возможностей РНР являются функции-переменные (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 мы познакомимся с основными принципами хранения данных, постепенно продвигаясь к более содержательным и, в конечном счете, более интересным приложениям.
Функции-переменные
Одной из интересных возможностей РНР являются функции-переменные (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)
Скачать Java книгу»php/mysql/pdo/js
В библиотеку