П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 4096 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6757 раз(а).

Учебник HTML.
Просмотров 3718 раз(а).

Руководство по PHP5.
Просмотров 5991 раз(а).

Хостинг через призму DNS.
Просмотров 4809 раз(а).

Подборка текстов стандартных документов.
Просмотров 56244 раз(а).

Учебник PHP - Самоучитель
Просмотров 3703 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 8336 раз(а).

Внешние атаки...
Просмотров 4564 раз(а).

Учебник PHP.
Просмотров 3172 раз(а).

SSI в примерах.
Просмотров 175 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь



http://www.ooors.ru/ русский фейерверк официальный сайт оптом.


ГЛАВА 4. Функции

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

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

Назад | Содержание раздела | Общее Содержание | Вперед



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru