Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PI_lektsii_2016.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
6.12 Mб
Скачать

11.1.1 Повернення значень функцією.

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

Перед викликом функції необхідно задати значення змінних: $ price (ціна товару) і $ tax (податкова ставка). Потім оголошується функція calculate_cost (). При виклику функція отримує два параметри: податкову ставку і ціну товару. Потім обчислюється ціна з урахуванням податку, яка і повертається командою return. Приклад. Створення функції для обчислення податку:

$ 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

      1. Рекурсивні функції.

Ситуація, при якій функція багаторазово викликає сама себе, поки не буде виконана деяка умова, відкриває чудові можливості. При правильному використанні рекурсивні функції зменшують обсяг програми і роблять її більш виразною. Рекурсивні функції особливо часто використовуються при виконанні повторюваних дій – наприклад, при пошуку в файлах / масивах та побудові графічних зображень (наприклад, фракталів). Класичним прикладом рекурсивних функцій, що зустрічаються в багатьох курсах програмування, є функція обчислення факторіала.

Приклад. Використання рекурсивної функції для обчислення факторіала: <? Рhp

function fact ($ n)

{    if ($ n == 0) $ fact = 1;

 else $ fact = $ n * fact ($ n-1);

return $ fact = $ n * fact ($ n-1);}

 echo "fact =". fact (5);

?>

В результаті виконання прикладу буде виведений наступний результат:

Fact = 120 = 55

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

11.1.3 Функції-змінні.

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

Виклик функції-змінної є ім'я змінної, за яким слідує пара круглих дужок. В круглих дужках можуть перераховуватися параметри (проте присутність параметрів не обов'язково). Узагальнений синтаксис функції-змінної:

$ ім'я_функції ();

Наступна програма демонструє цю незвичну, але корисну можливість. Припустимо, програма виводить різну інформацію в залежності від мови, вибраної користувачем. У нашому прикладі для простоти використовуються привітальні повідомлення для англо- і італомовних користувачів. Змінна $ language використовується для виконання функції-змінної (в наведеному прикладі – italian ()). Приклад. Вибір функції в залежності від призначеного для користувача введення

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

"рrint" Benvenuti al PHP Recipes. ";

} // Привітання англійською мовою

function english () {

print "Welcome to PHP Recipes.";

} // Вибрати італійську мову

$ language = "italian":

// Виконати функцію-змінну

$ language ();

Цей приклад демонструє цікаву концепцію функцій-змінних і наочно показує, що функції-змінні сприяють зменшенню обсягу програмного коду. Якби не ця можливість, функцію довелося б вибирати командою if або switch; це призвело б до помітного збільшення обсягу програмного коду і ризику появи додаткових помилок при кодуванні.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]