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