Значення, що повертаються функціями
Всі функції, наведені вище в якості прикладів, виконували будь-які дії. Окрім подібних дій, будь-яка функція може повертати як результат своєї роботи якесь значення. Це робиться за допомогою return. Значення, що повертається може бути будь-якого типу, включаючи списки і об'єкти. Коли інтерпретатор зустрічає команду return у тілі функції, він негайно припиняє її виконання і переходить на той рядок, з якої була викликана функція.
Наприклад, складемо функцію, яка повертає вік людини. Якщо людина не померла, то вік вважається відносно поточного року.
<? Php
/* Якщо другий параметр передається він сприймається
як true, то він розглядається як
дата смерті, */
function Age ($birth, $is_dead) {
if ($is_dead) return $is_dead-$ birth;
else return date ("Y") - $birth;
}
echo Age (1971, false); // для 2009 року виведе 38
echo Age (1971, 2001); // виведе 30
?>
У цьому прикладі можна було і не використовувати функцію return, а просто замінити її функцією виведення echo. Проте якщо ми все-таки робимо так, що функція повертає якесь значення (у даному випадку вік людини), то в програмі ми можемо присвоїти будь-якій змінній значення цієї функції:
$An_age = Age (1981, 2004);
У результаті роботи функції може бути повернуто лише одне значення. Кілька значень можна отримати, якщо повертати список значень (одновимірний масив). Припустимо, ми хочемо отримати повний вік людини з точністю до дня.
<? Php
function Full_age ($ b_day, $ b_month, $ b_year)
{
$y = date ("Y");
$m = intval (date ("m"));
$d = intval (date ("d"));
$B_month = intval($ b_month);
$B_day = intval($ b_day);
$B_year = intval($ b_year);
$day = ($b_day> $d? 30 - $b_day + $d: $d - $b_day);
$tmpMonth = ($b_day> $d? -1: 0);
$month = ($b_month> $m + $tmpMonth? 12 - $ b_month +
$tmpMonth + $m: $m + $tmpMonth - $b_month);
$tmpYear = ($b_month> $m + $tmpMonth? -1: 0);
if ($b_year> $y + $tmpYear)
{
$year = 0; $month = 0;$ day = 0;
}
else
{
$year = $y + $tmpYear - $b_year;
}
return array ($day, $month, $year);
}
$Age = Full_age ("29", "06", "1986");
echo "Вам $age [2] років, $ age[1] місяців і $age [0] днів";
?>
Коли функція повертає кілька значень для їх обробки в програмі, зручно використовувати мовну конструкцію list (), яка дозволяє однією дією присвоїти значення одразу кільком змінним. Наприклад, у попередньому прикладі, залишивши без зміни функцію, обробити повернене значення можна так:
<?
// Виклик функції Full_age ()
list ($ay, $ month, $ year) = Full_age ("07","08", "1974");
echo "Вам $year років, $month місяців і $day днів ";
?>
Взагалі конструкцію list () можна використовувати для присвоєння змінним значень елементів будь-якого масиву.
Приклад. Використання list ()
<?
$Arr = array ("first", "second");
list ($ a, $ b) = $Arr;
// Змінній $a присвоюється перше
// Значення масиву, $b - друге
echo $a, "", $b;
// Виведе рядок «first second»
?>