PHP: Функции
| Автор: | Артемьев Сергей Игоревич |
| ICQ: | 438856621 |
| email: | _spin_@bk.ru |
Функция - это именованный набор выражений, выполняющих определённую задачу. Чаще всего функции используются для многократного выполнения одной и той же последовательность действий, но над разными исходными данными и в разных местах скрипта.
Функции бывают пользовательские и системные. Пользовательские функции (как следует из названия) программист пишет самостоятельно. Системные функции всегда доступны из любого места скрипта и объявлять их не надо.
Пользоваться функциями очень просто. Объявляется функция следующим образом:
<?php
function mySampleFunction($parameter1, $parameter2)
{
// набор выражений (тело функции)
// return возвращаемое_значение
}
?>
Любая функция имеет имя, список параметров, тело функции и возвращаемые данные. Правила именования функций аналогичны правилам дя переменных. Параметры записываются в скобках через запятую, а если функции не требуются параметры - должны ставится пустные скобки "()". Любая функция должна возвращать какое-либо значение. Если в коде функции не встречается выражение return, то считается, что функция возвращает пустое значение. Немаловажный факт - в PHP тип возвращаемых данных заранее не определён. Поэтому одна функция может возвращать значения с различными типами данных в зависимости от входных параметров.
<?php
// Функция выводит сообщение пользователя с
// соответствующим описанием в зависимости от
// важности ($severity).
// Возвращает пустое значение
function showError($severity, $error)
{
switch($severity)
{
case 0:
echo 'Сообщение: ';
break;
case 1:
echo 'Предупреждение: ';
break;
case 2:
echo 'Ошибка: ';
break;
case 3:
echo 'Критическая ошибка: ';
break;
default:
echo 'Неизвестно: ';
break;
}
echo $error . "<br />\n";
}
?>
Теперь в любом месте скрипта можно написать
<?php
showError(0, 'Функция работает');
?>
и в браузер будет выведено
Сообщение: Функция работает
Рассмотрим более интересный вариант применения - функцию преобразования данных. Например, у нас есть список, содержащий полные имена, фамилии и отчества сотрудников. Нам для составления отчёта надо преобразовать полное ФИО к формату фамилии с инициалами, т.е. преобразовать "Иванов Александр Владимирович" в "Иванов А.В.".
Функция для преобразования будет выглядеть так:
<?php
/*
$f - фамилия
$i - имя
$o - отчество
*/
function convertFIO($f, $i, $o)
{
if(!isset($f) || !isset($i) || !isset($o))
return false;
// Присваиваем результату фамилию
$result = $f;
// добавляем первый символ имени и точку
$result .= substr($i, 0, 1) . '.';
// добавляем первый символ отчества и точку
$result .= substr($o, 0, 1) . '.';
// Позвращаем результат
return $result;
}
?>
а код для вызова функции будет выглядеть так:
<?php
// считываем данные из файла
$fulls = file('fullnames.txt');
$shorts = array();
// обрабатываем каждую строку исходного файла
foreach ($fulls as $value)
{
// разделяем строку на фамили, имя, отчество
list($f, $i, $o) = split(' ', $value);
// получаем сокращённую форму
$fio = convertFIO($f, $i, $o) . "\n";
// если функция не вернула false
// добавляем результат в выходной массив
if($fio)
$shorts []= $fio;
}
// сохраняем полученные данные в файл
file_put_contents('shortnames.txt', implode('', $sorts));
?>
При использовании функций необходимо помнить следующее:
- В теле функции используются копии параметров, поэтому все изменения переменных будут потеряны привыходе из функции. Мы уже рассматривали такой пример при изучении областей видимости переменных.
- Если параметр должен быть изменён в функции - необходимо передавать его по ссылке, т.е. в описании функции надо перед именем параметра добавить "&": function func($p1, &$p2) { }
- В старых версиях PHP функция должна была быть объявлена до первого использования, но в PHP версии 4.3 и выше порядок объявления и использования функции может быть любым.
Как видите, использование функций позволяет существенно сократить код и повысить его читаемость. Кроме того, использование функций значительно облегчает отладку и совершенствование кода, т.к. все нужные выражения находятся в одном месте и не надо лопатить весь скрипт в поисках нужных участков. Кроме того, умение пользоваться функциями очень пригодится при изучении работы с классами в одном из следующих уроков.