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

Учебник PHP #4
<< 1 2 3 >>
\"\">home</a> | <a href = \"\">recipes</a> | <a href = \"\">events</a><br>

<a href = \"\">tutorials</a> | <a href = \"\">about</a> I <a href = \"\">contact us</a><br>";

display_copyright($site_name);

print "</center>";

}

$site_name = "PHP Recipes":

display_footer($site_name);

display_copyhght($site_name);

Сценарий выводит следующий результат:

home | recipes | events

tutorials | about | contact us

Copyright © 2001 PHP Recipes. All Rights Reserved

Обратите внимание: функцию display_copyright( ) можно вызвать и за пределами display_footer( ) по аналогии стем, как функция display_footer( ) использовалась в предыдущем примере. Концепция защищенных функций в РНР не поддерживается.

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

Возврат значений из функции

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

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

Листинг 4.2. Создание функции для вычисления налога

$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.3) сумма счета пользователя сравнивается с предельным размером кредита. Алгоритм на псевдокоде выглядит так:

Объявить функцию check_limit( ), которая при вызове получает два параметра. Первый параметр, $total_cost, определяет общую сумму счета, накопленную пользователем до настоящего момента. Второй параметр, $credit_limit, определяет максимальную сумму, которую может потратить пользователь.
Если накопленная сумма счета превышает предельный размер кредита, функция возвращает ложное значение (0).
Если условие команды i f оказывается ложным, работа функции еще не завершена. В этом случае общая сумма не превышает предельного размера кредита, поэтому функция должна вернуть логическую истину.
Вызвать функцию check_limit( ) в условии команды if. Проверить, какое значение было возвращено при вызове — истинное или ложное. В зависимости от результата проверки выполняется то или иное действие.

Если при вызове check_limit( ) было получено значение TRUE, мы предлагаем пользователю продолжить закупку. В противном случае пользователь информируется о превышении кредита.

Листинг 4.3. Сравнение текущей суммы счета пользователя с предельным размером кредита

$cost = 1456.22;

$limit = 1000.00;

function check_limit($total_cost. $credit_limit)

if ($total_cost > $credit_limit) :

return 0;

endif;

return 1;

}

if (check_limit($cost. $limit)) :

// Продолжить закупки

print "Keep shopping!";

else :

print "Please lower your total bill to less than $".$limit."!";

endif;

При выполнении листинга 4.3 будет выведено сообщение об ошибке, поскольку значение $cost превышает $limit.

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

Объявить функцию best_years( ), вызываемую с одним параметром. Параметр $label определяет сорт вина, для которого пользователь хотел бы узнать три рекомендуемых года.
Объявить два массива, $merlot и $zinfandel. В каждом массиве хранится три рекомендуемых года для соответствующего сорта вина.
Написать команду 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.

Рекурсивные функции

Ситуация, при которой функция многократно вызывает сама себя, пока не будет выполнено некоторое условие, открывает замечательные возможности. При правильном использовании рекурсивные функции уменьшают объем программы и делают ее более выразительной. Рекурсивные функции особенно часто используются при выполнении повторяющихся действий — например, при поиске в файлах/массивах и построении графических изображений (например, фракталов). Классическим примером рекурсивных функций, встречающимся во многих курсах программирования, является суммирование чисел от 1 до N. Программа, приведенная в листинге 4.5, суммирует все целые числа от 1 до 10.

Листинг 4.5. Использование рекурсивной функции для суммирования последовательных целых чисел

function summation ($count) {

if ($count != 0) :

return $count + summation($count-1);

endif;

}

$sum = summation(10);

print "Summation = $sum";

В результате выполнения листинга 4.5 будет выведен следующий результат:

Summation = 55

Если
Комментарии (0)
<< 1 2 3 >>
Скачать Java книгу

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

На главную

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


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