Язык программирования PHP | страница 47




>static $var1, $var2;


Статической переменной может быть присвоено любое значение, но не ссылка.


>

>function Test_s(){

>static $a = 1;

>// нельзя присваивать выражение или ссылку

> $a = $a*2;

> echo $a;

>}

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

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

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

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

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

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

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

>?>


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


Все функции, приведенные выше в качестве примеров, выполняли какие-либо действия. Кроме подобных действий, любая функция может возвращать как результат своей работы какое-нибудь значение. Это делается с помощью утверждения return. Возвращаемое значение может быть любого типа, включая списки и объекты. Когда интерпретатор встречает команду return в теле функции, он немедленно прекращает ее исполнение и переходит на ту строку, из которой была вызвана функция.


Например, составим функцию, которая возвращает возраст человека. Если человек не умер, то возраст считается относительно текущего года.


>

>/* если второй параметр вычисляется

>как 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);


В результате работы функции может быть возвращено только одно значение. Несколько значений можно получить, если возвращать список значений (одномерный массив). Допустим, мы хотим получить полный возраст человека с точностью до дня.


>

>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;