Всем добрый день. Сегодняшней статьёй мы продолжаем погружаться в недра PHP, но не только. В конце данной статьи вы найдёте кроссворд, разгадав который вы можете получить от 500 до 1500 рублей. Все подробности тут, а мы продолжаем учиться.
Функция – это участок кода, который можно многократно выполнять в различных местах PHP скрипта (нашей страницы).
Синтаксис:
function siteOn(){
// тело функции
echo 'Привет всем читателям блога Site on!';
}
Где siteOn – это произвольное имя функции, оно регистро-независимое. Функция в примере выше выводит заданный текст. Когда PHP интерпретатор обрабатывает код, он видит только объявление функции, без её тела, и естественно, не выполняет его. Тело функции храниться в памяти до завершения работы PHP скрипта, то есть до конца загрузки страницы.
После написания функции наша задача сводится к тому, чтобы вызывать её в нужных нам местах. Вот как это делается:
<?php
function siteOn(){
echo 'Привет всем читателям блога Site on!<br />';
}
siteOn(); // вызов функции
siteOn(); // вызов функции
siteOn(); // вызов функции
?>
В примере выше мы вызвали функцию аж 3 раза, и вот результат:
Казалось бы, ну функция и что? Мы могли бы эту строчку просто написать 3 раза и без функции. Могли, но если мы вдруг захотим что-то поменять в этом фрагменте, то менять нам придётся всего в одном месте, а не в трёх. Но это ещё не всё! Сейчас мы рассмотрели простой вариант, когда всё рядом и в одном файле. В жизни же в файле может быть тысячи строк, и раскиданы они могут быть хаотично по всему файлу.
Одно дело зайти и поменять всё в одной функции, другое дело менять в 10 местах да ещё и искать по всему файлу. Но и это не всё! Сайты не состоят из одного файла, какой-нибудь фрагмент кода нам мог бы пригодиться в десятках различных файлов, и нам пришлось бы искать все повторения этого кода кучу времени. Благодаря функциям мы знаем, что, например, все функции мы храним в таком-то файле, зайду туда, и поменяю один раз.
То есть можете взять себе такое правило: если какой-то участок кода будет повторяться, то обязательно делаем из него функцию!
В PHP нельзя 2 раза объявить одну и туже функцию. К примеру, если написать:
<?php
function siteOn(){
// любой код или без него
}
function siteOn(){
// любой код или без него
}
?>
То получим следующую ошибку. Кстати, запоминайте все типичные ошибки:
Fatal error:
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(). Пример:
<?php
function siteOn(){
// любой код или без него
}
if(function_exists('siteOn')){
echo 'Такая функция уже есть!';
}
?>
Результат:
Лично я никогда не использую эту функцию, но знать вы о ней должны.
Аргумент функции ещё можно назвать её параметром. Выглядит это вот так:
<?php
function siteOn($author){
echo $author . ' - автор блога Site on!';
}
?>
В примере выше аргумент функции это переменная $author. Как его можно использовать? При вызове функций, мы можем передавать внутрь неё значение аргумента. Это придаёт нашим функциям небывалую гибкость и динамику:
<?php
function siteOn($author){
echo $author . ' - автор блога Site on!<br />';
}
siteOn('Сергей'); // первый способ
$name = 'Андрей'; // второй способ
siteOn($name);
siteOn(); // ничего не передаём
?>
Результат:
Как видите, когда мы не передали аргумент, мы получили ошибку типа Warning, после которой исполнение нашего PHP скрипта всё равно продолжилось дальше. Опять таки ошибка содержит очень подробную информацию о том, где всё это произошло. Warning - это серьёзная ошибка, и игнорировать её нельзя.
Функция может иметь сколько угодно аргументов, например:
<?php
function siteOn($author, $blog){
echo $author . ' - автор блога '. $blog .'<br />';
}
siteOn('Сергей', 'Site on!'); // первый способ
$name = 'Андрей'; // второй способ
siteOn($name, 'Сладкоешка');
siteOn('Фёдор Иванов'); // передали только 1 аргумент
?>
Результат:
Немного тонкостей. Следующим способом вызова функций обычно никто не пользуется, и вам я так делать тоже не советую, но знать вы о нём должны. Смотрим:
<?php
function siteOn($author, $blog){
echo $author . ' - автор блога '. $blog .'<br />';
}
$text = 'siteOn'; // заносим в переменную имя функции
$text('Сергей', 'Site on!'); // вызываем функцию через переменную
?>
Результат будет каким и обычно:
Помните таблицу умножения из предыдущей статьи? Там у нас есть 2 параметра: количество строк и количество столбцов, которые мы задаём в переменных. Самое время сделать из того кода целую функцию, которая будет принимать два вышеперечисленный значения!
Весь код из предыдущего урока я оставлю неизменным, разве что теперь нам больше не придётся задавать в нём количество строк и столбцов, мы это будем делать при вызове функции:
<?php
function getTable($rows, $cols){
// закомментировали эти 2 строки, так как количество теперь передаётся при вызове функции
// $rows = 20; // количество строк, tr
// $cols = 20; // количество столбцов, td
$table = '<table border="1">';
for ($tr=1; $tr<=$rows; $tr++){
$table .= '<tr>';
for ($td=1; $td<=$cols; $td++){
if ($tr===1 or $td===1){
$table .= '<th style="color:white;background-color:green;">'. $tr*$td .'</th>';
}else{
$table .= '<td>'. $tr*$td .'</td>';
}
}
$table .= '</tr>';
}
$table .= '</table>';
echo $table;
}
getTable(3,3); // выводим таблицу умножения 3 на 3
getTable(5,5); // выводим таблицу умножения 5 на 5
getTable(10,10); // выводим таблицу умножения 10 на 10
?>
Результат:
При создании функции мы можем задать произвольным аргументам значения по умолчанию. Аргументы, у которых есть значения по умолчанию можно не указывать при вызове функции и это не будет ошибкой. Потому что вместо пропущенного аргумента функция автоматически подставит значение по умолчанию. Пример:
<?php
function siteOn($author, $blog='Site on!'){
echo $author . ' - автор блога '. $blog .'<br />';
}
siteOn('Сергей');
?>
В этом примере мы аргументу $blog присвоили значение по умолчанию Site on! После чего вызвали функцию всего с одним аргументом, а второй использовал своё значение по умолчанию.
Результат:
Важно:
аргументы по умолчанию обязательно записываются последними.
Другими словами: обязательные аргументы (без значения по умолчанию) слева направо должны идти первыми, далее за ними идут аргументы, которые имеют значение по умолчанию.
Как в примере выше, сначала в круглых скобочках я записал обязательный аргумент $author, затем необязательный аргумент $blog. Аргумент $blog я назвал необязательным, так как у него есть значение по умолчанию.
На сегодня, я считаю, достаточно, советую попробовать написать свои функции, которые будут принимать различные аргументы. В следующей статье мы продолжим тему изучения функций в PHP, а теперь предлагаю всем немного развлечься и при этом заработать, блеснув эрудицией!
Итак, я постарался сделать кроссворд не из самых лёгких, так как считаю своих читателей людьми образованными и смышлёными, а такие люди не нуждаются в поддавках. Ещё раз напоминаю, что все подробности об участии в конкурсе по разгадыванию кроссвордов находятся тут. Скажу только, что победитель получит славу, золото и женщин обратную ссылку на его (или её) сайт.
Желаю удачи!
Пожалуйста, прокомментируйте, как Вам моя статья?