Реализация функций в php

Собственные (пользовательские) функции в PHP. Часть 1

Заметка: активирована адаптивная версия сайта, которая автоматически подстраивается под небольшой размер Вашего браузера и скрывает некоторые детали сайта для удобства чтения. Приятного просмотра!

Всем добрый день. Сегодняшней статьёй мы продолжаем погружаться в недра PHP, но не только. В конце данной статьи вы найдёте кроссворд, разгадав который вы можете получить от 500 до 1500 рублей. Все подробности тут, а мы продолжаем учиться.

Что такое функция?

Функция – это участок кода, который можно многократно выполнять в различных местах PHP скрипта (нашей страницы).

function siteOn()< // тело функции echo 'Привет всем читателям блога Site on!'; >

Где siteOn – это произвольное имя функции, оно регистро-независимое. Функция в примере выше выводит заданный текст. Когда PHP интерпретатор обрабатывает код, он видит только объявление функции, без её тела, и естественно, не выполняет его. Тело функции храниться в памяти до завершения работы PHP скрипта, то есть до конца загрузки страницы.

После написания функции наша задача сводится к тому, чтобы вызывать её в нужных нам местах. Вот как это делается:

'; > siteOn(); // вызов функции siteOn(); // вызов функции siteOn(); // вызов функции ?>

В примере выше мы вызвали функцию аж 3 раза, и вот результат:

вызов

Зачем нужны функции?

Казалось бы, ну функция и что? Мы могли бы эту строчку просто написать 3 раза и без функции. Могли, но если мы вдруг захотим что-то поменять в этом фрагменте, то менять нам придётся всего в одном месте, а не в трёх. Но это ещё не всё! Сейчас мы рассмотрели простой вариант, когда всё рядом и в одном файле. В жизни же в файле может быть тысячи строк, и раскиданы они могут быть хаотично по всему файлу.

Одно дело зайти и поменять всё в одной функции, другое дело менять в 10 местах да ещё и искать по всему файлу. Но и это не всё! Сайты не состоят из одного файла, какой-нибудь фрагмент кода нам мог бы пригодиться в десятках различных файлов, и нам пришлось бы искать все повторения этого кода кучу времени. Благодаря функциям мы знаем, что, например, все функции мы храним в таком-то файле, зайду туда, и поменяю один раз.

То есть можете взять себе такое правило: если какой-то участок кода будет повторяться, то обязательно делаем из него функцию!

Проверка на существование

В PHP нельзя 2 раза объявить одну и туже функцию. К примеру, если написать:

// любой код или без него > function siteOn()< // любой код или без него > ?>

То получим следующую ошибку. Кстати, запоминайте все типичные ошибки:

Cannot redeclare siteOn() (previously declared in Z:\home\custom\www\index.php:3) in Z:\home\custom\www\index.php on line 9

Читайте также:  Css selector all ids

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

Чтобы узнать, существует уже такая функция или нет, вы можете использовать встроенную функцию function_exists(). Пример:

// любой код или без него > if(function_exists('siteOn')) < echo 'Такая функция уже есть!'; >?>

Лично я никогда не использую эту функцию, но знать вы о ней должны.

Аргументы функций

Аргумент функции ещё можно назвать её параметром. Выглядит это вот так:

В примере выше аргумент функции это переменная $author. Как его можно использовать? При вызове функций, мы можем передавать внутрь неё значение аргумента. Это придаёт нашим функциям небывалую гибкость и динамику:

'; > siteOn('Сергей'); // первый способ $name = 'Андрей'; // второй способ siteOn($name); siteOn(); // ничего не передаём ?>

Как видите, когда мы не передали аргумент, мы получили ошибку типа Warning, после которой исполнение нашего PHP скрипта всё равно продолжилось дальше. Опять таки ошибка содержит очень подробную информацию о том, где всё это произошло. Warning — это серьёзная ошибка, и игнорировать её нельзя.

Функция может иметь сколько угодно аргументов, например:

'; > siteOn('Сергей', 'Site on!'); // первый способ $name = 'Андрей'; // второй способ siteOn($name, 'Сладкоешка'); siteOn('Фёдор Иванов'); // передали только 1 аргумент ?>

Нестандартный вызов функций

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

'; > $text = 'siteOn'; // заносим в переменную имя функции $text('Сергей', 'Site on!'); // вызываем функцию через переменную ?>

Результат будет каким и обычно:

Практический пример использования функций

Помните таблицу умножения из предыдущей статьи? Там у нас есть 2 параметра: количество строк и количество столбцов, которые мы задаём в переменных. Самое время сделать из того кода целую функцию, которая будет принимать два вышеперечисленный значения!

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

// закомментировали эти 2 строки, так как количество теперь передаётся при вызове функции // $rows = 20; // количество строк, tr // $cols = 20; // количество столбцов, td $table = ''; for ($tr=1; $tr'; for ($td=1; $td'. $tr*$td .''; >else< $table .= ''; > > $table .= ''; > $table .= '
'. $tr*$td .'
'; echo $table; > getTable(3,3); // выводим таблицу умножения 3 на 3 getTable(5,5); // выводим таблицу умножения 5 на 5 getTable(10,10); // выводим таблицу умножения 10 на 10 ?>

Аргументы по умолчанию

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

В этом примере мы аргументу $blog присвоили значение по умолчанию Site on! После чего вызвали функцию всего с одним аргументом, а второй использовал своё значение по умолчанию.

Читайте также:  Php задаем числовую переменную

аргументы по умолчанию обязательно записываются последними.

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

Как в примере выше, сначала в круглых скобочках я записал обязательный аргумент $author, затем необязательный аргумент $blog. Аргумент $blog я назвал необязательным, так как у него есть значение по умолчанию.

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

Кроссворд №1

Итак, я постарался сделать кроссворд не из самых лёгких, так как считаю своих читателей людьми образованными и смышлёными, а такие люди не нуждаются в поддавках. Ещё раз напоминаю, что все подробности об участии в конкурсе по разгадыванию кроссвордов находятся тут. Скажу только, что победитель получит славу, золото и женщин обратную ссылку на его (или её) сайт.

Добро пожаловать

Кликните на ячейки кроссворда для того, чтобы узнать вопрос.

Источник

Реализация функций в php

Приведём пример синтаксиса, используемого для описания функций:

Пример #1 Псевдокод для демонстрации использования функций

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

Имена функций следуют тем же правилам, что и другие метки в PHP. Корректное имя функции начинается с буквы или знака подчёркивания, за которым следует любое количество букв, цифр или знаков подчёркивания. В качестве регулярного выражения оно может быть выражено так: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$ .

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

В случае, когда функция определяется в зависимости от какого-либо условия, например, как это показано в двух приведённых ниже примерах, обработка описания функции должна предшествовать её вызову.

Пример #2 Функции, зависящие от условий

/* Мы не можем вызвать функцию foo() в этом месте,
поскольку она ещё не определена, но мы можем
обратиться к bar() */

if ( $makefoo ) function foo ()
echo «Я не существую до тех пор, пока выполнение программы меня не достигнет.\n» ;
>
>

/* Теперь мы благополучно можем вызывать foo(),
поскольку $makefoo была интерпретирована как true */

function bar ()
echo «Я существую сразу с начала старта программы.\n» ;
>

Пример #3 Вложенные функции

function foo ()
function bar ()
echo «Я не существую пока не будет вызвана foo().\n» ;
>
>

/* Мы пока не можем обратиться к bar(),
поскольку она ещё не определена. */

/* Теперь мы можем вызвать функцию bar(),
обработка foo() сделала её доступной. */

Все функции и классы PHP имеют глобальную область видимости — они могут быть вызваны вне функции, даже если были определены внутри и наоборот.

PHP не поддерживает перегрузку функции, также отсутствует возможность переопределить или удалить объявленную ранее функцию.

Замечание: Имена функций регистронезависимы для символов ASCII от A до Z , тем не менее, предпочтительнее вызывать функции так, как они были объявлены.

Функции PHP поддерживают как списки аргументов переменной длины, так и значения аргументов по умолчанию. Смотрите также описания функций func_num_args() , func_get_arg() и func_get_args() для более детальной информации.

Читайте также:  Html logo as background or image

Можно вызывать функции PHP рекурсивно.

Пример #4 Рекурсивные функции

Замечание: Рекурсивный вызов методов/процедур с глубиной более 100-200 уровней рекурсии может вызвать переполнение стека и привести к аварийному завершению скрипта. В частности, бесконечная рекурсия будет считаться программной ошибкой.

User Contributed Notes

Источник

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

PHP позволяет разработчикам создавать собственные функции.

Создание функций

Создание функции выглядит следующим образом:

Сначала пишется ключевое слово function , затем название функции (правила именования такие же, как у переменных), круглые скобки (здесь мы можем принимать данные от пользователя), а в фигурных скобках пишем действия, которые функция должна выполнять.

Функция выполняется только при её вызове. Если убрать из примера выше строку message(); , то функция не запустится.

Аргументы функций

Функция может принимать значения от пользователя:

В примере выше мы передаём функции 2 значения. Функция помещает их в переменные $v1 и $v2 , после чего мы можем работать с ними.

Получение значения из функции

Получить результат работы функции можно с помощью оператора return :

Отлично, теперь функция только выполняет расчёты и возвращает результат, а мы уже сами решаем, что с ним делать дальше.

Старайтесь не выводить никакую информацию на экран внутри функций.

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

Значения по-умолчанию

Вы можете указать значение по-умолчанию для переменной:

 echo sum(5, 15); // выведет 20 echo sum(5); // выведет 7 ?>

В примере выше мы указываем, что если 2-ой параметр не передан, то переменная получит значение 2 .

Тайп хинтинг (указание типов аргументов)

В PHP 7 появилась полноценная поддержка так называемых тайп хинтов (type hints). Мы можем указать, какой тип данных должен быть у передаваемого в функцию значения:

 echo make(1, 'текст'); // ошибка, вторым параметром должен быть массив ?>

Если мы передадим в функцию значение, которое можно привести к требуемому типу (например, вместо строки передадим число), значение будет приведено к нужному типу. Если значение привести нельзя (например, массив нельзя превратить в строку), произойдёт ошибка:

 make(1); // Ошибки не будет, число превратится в строку make([1,2]); // Ошибка, массив нельзя превратить в строку ?>

Тип возвращаемого значения

Ещё одна фишка PHP 7 — возможность указать, какой тип данных должна возвращать функция. Если возможно, возвращаемое значение будет приведено к нужному типу, иначе мы получим ошибку:

Область видимости функций

Функции в PHP имеют локальную область видимости. Это означает, что внутри функции видны только те переменные, которые были объявлены внутри функции, либо переданы в неё:

 $a = 5; show(); // Ошибка, $a внутри функции не существует
 $a = 5; edit($a); // Выведет 5, потому что $a внутри и вне функции - это разные переменные echo $a;

Глобальные переменные в функциях

Глобальные переменные можно использовать внутри функций с помощью ключевого слова global :

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

По возможности никогда не используйте глобальные переменные.

Константы в функциях

В отличие от переменных, константы видны в любой области видимости:

Источник

Оцените статью