52568.fb2 Курс "Язык программирования PHP" - читать онлайн бесплатно полную версию книги . Страница 33

Курс "Язык программирования PHP" - читать онлайн бесплатно полную версию книги . Страница 33

}

Test_s(); // выведет 2

echo $a; // ничего не выведет, так как

// $a доступна только

// внутри функции

Test_s(); // внутри функции $a=2, поэтому

// результатом работы функции

// будет число 4

?>

Возвращаемые значения

Все функции, приведенные выше в качестве примеров, выполняли какие-либо действия. Кроме подобных действий, любая функция может возвращать как результат своей работы какое-нибудь значение. Это делается с помощью утверждения 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); // выведет 33

echo Age(1971, 2001); // выведет 30

?>

В этом примере можно было и не использовать функцию return, а просто заменить ее функцией вывода echo. Однако если мы все же делаем так, что функция возвращает какое-то значение (в данном случае возраст человека), то в программе мы можем присвоить любой переменной значение этой функции:

$my_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 ? $d : $d - $b_day);

$tmpMonth = ($b_day > $d ? -1 : 0);

$month = ($b_month > $m + $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");