- Собственные (пользовательские) функции в PHP. Часть 1
- Что такое функция?
- Зачем нужны функции?
- Проверка на существование
- Аргументы функций
- Нестандартный вызов функций
- Практический пример использования функций
- Аргументы по умолчанию
- Кроссворд №1
- Добро пожаловать
- Реализация функций в php
- User Contributed Notes
- Пользовательские функции в 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
В этой ошибке указано, что мы уже объявляли такую функцию, и даже указано в каком именно файле и строке мы это уже делали. Обращаю ваше внимание, что в 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 = '
'. $tr*$td .' | '; > > $table .= ''; > $table .= '
Аргументы по умолчанию
При создании функции мы можем задать произвольным аргументам значения по умолчанию. Аргументы, у которых есть значения по умолчанию можно не указывать при вызове функции и это не будет ошибкой. Потому что вместо пропущенного аргумента функция автоматически подставит значение по умолчанию. Пример:
В этом примере мы аргументу $blog присвоили значение по умолчанию Site on! После чего вызвали функцию всего с одним аргументом, а второй использовал своё значение по умолчанию.
аргументы по умолчанию обязательно записываются последними.
Другими словами: обязательные аргументы (без значения по умолчанию) слева направо должны идти первыми, далее за ними идут аргументы, которые имеют значение по умолчанию.
Как в примере выше, сначала в круглых скобочках я записал обязательный аргумент $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» ;
>
>
?php
/* Мы пока не можем обратиться к bar(),
поскольку она ещё не определена. */
/* Теперь мы можем вызвать функцию bar(),
обработка foo() сделала её доступной. */
Все функции и классы PHP имеют глобальную область видимости — они могут быть вызваны вне функции, даже если были определены внутри и наоборот.
PHP не поддерживает перегрузку функции, также отсутствует возможность переопределить или удалить объявленную ранее функцию.
Замечание: Имена функций регистронезависимы для символов ASCII от A до Z , тем не менее, предпочтительнее вызывать функции так, как они были объявлены.
Функции PHP поддерживают как списки аргументов переменной длины, так и значения аргументов по умолчанию. Смотрите также описания функций func_num_args() , func_get_arg() и func_get_args() для более детальной информации.
Можно вызывать функции 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 :
Использование глобальных переменных является плохим тоном. Они делают код неочевидным и запутанным, функции начинают зависеть от внешних факторов.
По возможности никогда не используйте глобальные переменные.
Константы в функциях
В отличие от переменных, константы видны в любой области видимости: