Значення, що повертаються функціями

 

Всі функції, наведені вище в якості прикладів, виконували будь-які дії. Окрім подібних дій, будь-яка функція може повертати як результат своєї роботи якесь значення. Це робиться за допомогою 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» 
?>