Язык программирования 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;