Возврат значений из функции
По завершении работы функции часто бывает полезно вернуть некоторое значение, для чего результат вызова функции обычно присваивается некоторой переменной. Функции могут возвращать значения любых типов, в том числе массивы и списки. Пример приведен в листинге 4.2, где функция calculate_cost( ) вычисляет налог с заданной суммы и возвращает общую сумму вместе с налогом. Прежде чем переходить к рассмотрению листинга, просмотрите краткое описание алгоритма на псевдокоде:
· Перед вызовом функции задать значения переменных: $price (цена товара) и $tax (налоговая ставка).
· Объявить функцию calculate_cost( ). При вызове функция получает два параметра: налоговую ставку и цену товара.
· Вычислить цену с учетом налога и вернуть ее командой return.
· Вызвать calculate_cost() и присвоить значение, возвращенное функцией, переменной $total_cost.
· Вывести соответствующее сообщение.
Листинг 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
Функции, не возвращающие значений, также называются процедурами.
Существует и другой способ использования возвращаемых значений, при котором вызов функции включается прямо в условную/циклическую команду. В следующей программе (листинг 3) сумма счета пользователя сравнивается с предельным размером кредита. Алгоритм на псевдокоде выглядит так:
· Объявить функцию check_limit( ), которая при вызове получает два параметра. Первый параметр, $total_cost, определяет общую сумму счета, накопленную пользователем до настоящего момента. Второй параметр, $credit_limit, определяет максимальную сумму, которую может потратить пользователь.
· Если накопленная сумма счета превышает предельный размер кредита, функция возвращает ложное значение (0).
· Если условие команды i f оказывается ложным, работа функции еще не завершена. В этом случае общая сумма не превышает предельного размера кредита, поэтому функция должна вернуть логическую истину.
· Вызвать функцию check_limit( ) в условии команды if. Проверить, какое значение было возвращено при вызове — истинное или ложное. В зависимости от результата проверки выполняется то или иное действие.
Если при вызове check_limit( ) было получено значение TRUE, мы предлагаем пользователю продолжить закупку. В противном случае пользователь информируется о превышении кредита.
Листинг 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. Возвращение функцией нескольких величин
// Сорт вина, для которого выводятся лучшие годы
$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.
Дата добавления: 2015-09-14; просмотров: 836;