Чтение онлайн

на главную - закладки

Жанры

Курс "Язык программирования PHP"

Савельева Нина Владимировна

Шрифт:

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

<?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");

echo "Вам $age[2]
лет, $age[1] месяцев и $age[0] дней";

?>

Когда функция возвращает несколько значений для их обработки в программе, удобно использовать языковую конструкцию list, которая позволяет одним действием присвоить значения сразу нескольким переменным. Например, в предыдущем примере, оставив без изменения функцию, обработать возвращаемые ей значения можно было так:

<?

// задание функции Full_age

list($day,$month,$year) = Full_age("07",

"08","1974");

echo "Вам $year лет, $month месяцев и

$day дней";

?>

Вообще конструкцию list можно использовать для присвоения переменным значений элементов любого массива.

<?

$arr = array("first","second");

list($a,$b) = $arr;

// переменной $a присваивается первое

// значение массива, $b – второе

echo $a," ",$b;

// выведет строку «first second»

?>

Возвращение ссылки

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

глобального массива), ссылку на статическую переменную (или ее часть) или ссылку на один из аргументов, если он был также передан по ссылке.

<?

$a = 3; $b = 2;

function & ref($par){

global $a, $b;

if ($par % 2 == 0) return $b;

else return $a;

}

$var =& ref(4);

echo $var, " и ", $b, "<br>";

//выведет 2 и 2

$b = 10;

echo $var, " и ", $b, "<br>";

// выведет 10 и 10

?>

При использовании синтаксиса ссылок в переменную $var нашего примера не копируется значение переменной $b возвращенной функцией $ref, а создается ссылка на эту переменную. То есть теперь переменные $var и $b идентичны и будут изменяться одновременно.

Переменные функции

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

<?

/* создадим две простые функции:

Add_sign – добавляет подпись к строке и

Show_text – выводит строку текста */

function Add_sign($string,

$sign="С уважением, Петр"){

echo $string ." ".$sign;

}

function Show_text{

echo "Отправить сообщение по почте<br>";

}

$func = "Show_text";

// создаем переменную со значением,

// равным имени функции Show_text

$func;

// это вызовет функцию Show_text

$func = "Add_sign";

// создаем переменную со значением,

// равным имени функции Add_sign

$func("Привет всем <br>");

// это вызовет функцию

// Add_sign с параметром "Привет всем"

?>

В этом примере функция Show_text просто выводит строку текста. Казалось бы, зачем для этого создавать отдельную функцию, если существует специальная функция echo. Дело в том, что такие функции, как echo, print, unset, include и т.п. нельзя использовать в качестве переменных функций. То есть если мы напишем:

<?

$func = "echo ";

$func("TEXT");

?>

то интерпретатор выведет ошибку:

Поделиться:
Популярные книги

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Черный Маг Императора 8

Герда Александр
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 8

Измена. Отбор для предателя

Лаврова Алиса
1. Отбор для предателя
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Отбор для предателя

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Хроники странного королевства. Вторжение. (Дилогия)

Панкеева Оксана Петровна
110. В одном томе
Фантастика:
фэнтези
9.38
рейтинг книги
Хроники странного королевства. Вторжение. (Дилогия)

Часовой ключ

Щерба Наталья Васильевна
1. Часодеи
Фантастика:
фэнтези
9.36
рейтинг книги
Часовой ключ

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Очешуеть! Я - жена дракона?!

Амеличева Елена
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Очешуеть! Я - жена дракона?!

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9