создание и продвижение сайта (вбиваю в ТОП-10, как гвозди)Настройка и сопровождение платной рекламы яндекс.директ

Урок 11. Пользовательские функции в PHP

Содержание

Теория

Зачем нужны пользовательские функции?

Возникает такая ситуация, когда некоторые участки кода повторяются несколько раз в разных местах. Пользовательские Функции нужны для того, чтобы убрать дублирование кода.

Дублирование плохо тем, что если потребуется что-то поменять в коде, это придется сделать во многих местах.

Кроме того, функции скрывают внутри себя какой-то код, о котором нам не приходится задумываться. Например, у нас есть функция s(), которая сохраняет пользователя в базу данных. Мы можем просто вызывать ее, не задумываясь о том, какой код выполняется внутри функции. Это очень удобно. В программировании это называется инкапсуляцией.

Синтаксис функций пользователя

Функция создается с помощью команды function. Далее через пробел следует имя функции и круглые скобки. Круглые скобки могут быть пустыми, либо в них могут быть указаны параметры, которые принимает функция.Параметры - это обычные переменные PHP. Сколько может быть параметров: 1, несколько (в этом случае они указываются через запятую), ни 1 (в этом случае круглые скобки все равно нужны, хоть они и будут пустыми).

<?//'f' - это имя функции, ей передается 1 параметр $p:

function f($p){}

//Передаем функции 2 параметра - $a и $b:

function f($a,$b){}

//Вообще не передаем никаких параметров:

function f(){}?>

Обратите внимание на фигурные скобки в примерах: в них пишется код, который выполняет функция. Общий синтаксис функции выглядит так:

<?function имя_функции(здесь перечисляются параметры через запятую){Здесь написаны команды, которые выполняет функция}?>

Внимание! На 1 странице не должно быть повторяющихся имен функций.

Как вызвать функцию в коде?

Саму функцию можно вызвать в любом месте страницы (даже до ее определения). Функция вызывается по ее имени. При этом круглые скобки после ее имени обязательны, даже если они пустые. Пример:

Пишем функцию h, которая выводит на экран 'Привет, мир! ':

<?function h(){/*Тут пишем, что должна делать функция h*/echo'Привет, мир! ';}/*Тут вызывается функция h*/h();/*Функция печатает 'Привет, мир! '*/?>

Привет, мир!

Можно вывести фразу несколько раз, для этого достаточно написать функцию не 1 раз, а несколько:

<?h();h();h()?>

Привет, мир! Привет, мир! Привет, мир!

Подробнее о параметрах

В наших примерах мы вызывали функцию h() без параметров. Т.к. имя функции не должно повторяться на странице, делаем функцию d().

Теперь попробуем ввести параметр, который будет задавать текст, выводимый функцией d:

<?function d($q){/*Тут укажем параметр $q. Выведем на экран значение переменной $q:*/echo$q;}/*Теперь вызовем нашу функцию:*/d('Привет, Земляне')/*она выведет именно ту фразу, которую ей передали*/?>

<?function d($q){echo$q;}d('Привет, Земляне')?>

Привет, Земляне

Обратите внимание на переменную $q в нашей функции: в ней появляется то, что мы передали в круглых скобках при вызове функции.

Как PHP знает, что текст 'Привет, Земляне' нужно положить в переменную $q? Мы сказали ему об этом, когда создавали нашу функцию, вот тут: 'function d($q)'.

Если задается несколько параметров, то каждый из них будет лежать в своей переменной внутри функции.

Инструкция return

Чаще всего функция должна не выводить что-то через echo на экран, а возвращать.

Сделаем теперь так, чтобы функция не выводила что-то на экран, а возвращала текст скрипту, чтобы он смог записать этот текст в переменную и как-то обработать его дальше:

<?/*Зададим функцию:*/function e($q){/*Укажем функции с помощью инструкции 'return', что мы хотим, чтобы она вернула текст, а не вывела на экран:*/return$q;}/*Теперь вызовем нашу функцию и запишем значение в переменную message:*/$m=e('Привет, Земляне');/*Пока вывода на экран нет. И теперь в переменной $m лежит 'Привет, Земляне':*/echo$m;/*Убедимся в этом. Можно не вводить промежуточную переменную $m, а сделать так:*/echo'<p>'.e('Привет, Земляне')?>

<?function e($q){return$q;}$m=e('Привет, Земляне');echo$m;echo'<p>'.e('Привет, Земляне')?>

Привет, Земляне

Привет, Земляне

В принципе, практической пользы от того, что мы сделали - никакой, т.к. функция вернула нам то, что мы ей передали. Модернизируем пример так, чтобы функция принимала имя человека, а выводила строку 'Привет, %имя_человека_переданное_функции%!':

<?/*Зададим функцию:*/function g($n){/*Укажем здесь параметр $n, в котором будет лежать имя человека. Введем переменную $q, в которую запишем всю фразу:*/$q='Привет, '.$n.'! ';/*Укажем функции с помощью инструкции 'return', что мы хотим, чтобы она вернула содержимое переменной $q:*/return$q;}/*Теперь вызовем нашу функцию и запишем значение в переменную $message:*/$m=g('Иван');/*И теперь в переменной $q лежит 'Привет, Иван! ':*/echo$m./*убедимся в этом. Поздороваемся сразу с группой людей из 3 человек:*/'<p>'.g('Вася').g('Петя')..g('Коля')?>

<?function g($n){$q='Привет, '.$n.'! ';return$q;}$m=g('Иван');echo$m.'<p>'.g('Вася').g('Петя').g('Коля')?>

Привет, Иван!

Привет, Вася! Привет, Петя! Привет, Коля!

Частая ошибка с return

После того, как выполнится инструкция return, функция закончит свою работу. Т.е. после выполнения return больше никакой код не выполнится.

Это не значит, что в функции должен быть 1 return. Но выполнится только 1 из них. Такое поведение функций является причиной многочисленных трудноуловимых ошибок.

Пример:

<?function u($p){/*Если переменная $p имеет значение true, то вернем 'Верно'. Напоминаю о том, что конструкция if($p) эквивалентна if($p===true)*/if($p)return'Верно';/*Далее в PHP хотим проделать еще какие-то операции, но если переменная $p имеет значение true, сработает инструкция return, и код ниже работать не будет! Напротив, если $p===false, инструкция return не выполнится и код дальше будет работать*/echo'Привет, мир!';}/*Осознайте это и не совершайте ошибок*/?>

<?function u($p){if($p)return'Верно';echo'Привет, мир!';}?>

ПРОВЕРЬ!!!

Приемы работы с return

Существуют некоторые приемы работы с return, упрощающие код. Как сделать проще всего:

<?function j($p){/*Что делает код: если $p имеет значение true, то в переменную $r запишем 'Верно', иначе 'Неверно':*/if($p){$r='Верно';}else{$r='Неверно';}/*Вернем содержимое переменной result:*/return$r;}?>

<?function j($p){if($p){$r='Верно';}else{$r='Неверно';}return$r;}?>

Теперь упростим нашу функцию, используя прием работы с return:

<?function k($p){/*Что делает код: если $p имеет значение true, вернет 'Верно', иначе вернет 'Неверно'*/if($p){return'Верно';}else{return'Неверно';}}?>

<?function k($p){if($p){return'Верно';}else{return'Неверно';}}?>

Обратите внимание, насколько упростился код. Плюсом также является то, что мы убрали лишнюю переменную $r.

ПРОВЕРЬ!!!

Практика

Примеры решения задач

Задача

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

Решение:

<?function a($n){return$n*$n;};echo a(2)?>

4.

Внимание! На 1 странице не должно быть повторяющихся имен функций.

<?function b($n){return$n*$n/9;};echo b(3)?>.

1.

Задачи для решения

Простые функции

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

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

Сделать функцию, которая отнимает от 1-го числа 2-е и делит на 3-е.

Сделать функцию, которая принимает параметром число от 1 до 7, а возвращает день недели на русском языке.

Содержание

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович.

Ваше письмо×
Free Web Hosting