Page 52 - 4636
P. 52
Функцію larger()можна визначити таким чином:
function larger ($х, $y) {
if (!isset($х) || !isset ($y)) {
return false;
} else if ($x>=$y) {
return $x;
} else {
return $y;
}
Ця функція повертає більше з двох значень, переданих їй. У випадку помилки функція буде
повертати інше значення. Якщо одне з чисел відсутнє, функція larger()повертає false. (При
цьому програмісти, які використовують такий підхід, повинні мати на увазі, що тип повернення
необхідно перевірити за допомогою операції ===, щоб не поплутати значення false з нулем.)
Для порівняння: вбудована функція max() нічого не повертає, якщо обидві змінні не встановлені, а
якщо тільки одна змінна була встановлена, функція повертає значення саме цієї змінної.
Показаний нижче код:
$а = 1; $b = 2.5; $с = 1.9;
echolarger($a, $b)."<br />";
echolarger($c, $a)."<br />";
echo larger($d, $a)."<br />";
генерує наступне виведення, оскільки змінна $d не існує, a false на екран не виводиться:
2.5
1.9
Часто функції, які виконують певне завдання, і в той самий час не повинні повертати конкретних
значень, повертають true або false, щоб вказати на успішне або невдале виконання цього завдання.
Значення true і false можуть бути відповідно представлені цілими значеннями 1 або 0, хоча це
значення іншого типу.
Реалізація рекурсії
У РНР підтримуються рекурсивні функції. Під рекурсивною мають на увазі функція, яка викликає
саму себе. Ці функції особливо корисні для переміщення динамічними структурами даних, таких як
зв'язні списки і дерева.
Дуже небагато веб-додатків вимагають настільки складних структур даних, тому рекурсія
використовується досить рідко. У багатьох випадках рекурсію можна застосовувати замість ітерації,
оскільки обидва ці підходи дозволяють багаторазово виконувати ті чи інші дії. Рекурсивні функції
працюють повільніше і використовують більший обсяг пам'яті, ніж ітерація, тому там, де це можливо,
слід віддавати перевагу ітерації.
Заради повноти викладу розглянемо короткий приклад, показаний в лістингу 2.3
Лістинг 2.3 recursion.php - звернення рядка з використанням рекурсії та ітерації
function reverse_r($str) { if
(strlen($str) > 0) { reverse_r
(substr($str, 1));
}
echo substr($str, 0, 1);
return;
}
function reverse_i($str) {
for ($i = 1; $i <= strlen ($str) ; $i++) {
echo substr($str, -$i, 1);
}
return;
}
49