PHP позволяет разработчикам создавать собственные функции.
Создание функций
Создание функции выглядит следующим образом:
<?php
// Объявление функции
function message()
{
echo 'hello';
}
message(); // вызов функции
Сначала пишется ключевое слово function, затем название функции (правила именования такие же, как у переменных), круглые скобки (здесь мы можем принимать данные от пользователя), а в фигурных скобках пишем действия, которые функция должна выполнять.
Функция выполняется только при её вызове. Если убрать из примера выше строку message();, то функция не запустится.
Аргументы функций
Функция может принимать значения от пользователя:
<?php
function sum($v1, $v2)
{
echo $v1 + $v2;
}
sum(5, 15); // выведет 20
В примере выше мы передаём функции 2 значения. Функция помещает их в переменные $v1 и $v2, после чего мы можем работать с ними.
Получение значения из функции
Получить результат работы функции можно с помощью оператора return:
<?php
function sum($v1, $v2)
{
return $v1 + $v2;
}
echo sum(5, 15); // выведет 20
?>
Отлично, теперь функция только выполняет расчёты и возвращает результат, а мы уже сами решаем, что с ним делать дальше.
Старайтесь не выводить никакую информацию на экран внутри функций.
Иначе такую функцию может быть сложно использовать повторно в других местах вашего сайта.
Значения по-умолчанию
Вы можете указать значение по-умолчанию для переменной:
<?php
function sum($v1, $v2 = 2)
{
return $v1 + $v2;
}
echo sum(5, 15); // выведет 20
echo sum(5); // выведет 7
?>
В примере выше мы указываем, что если 2-ой параметр не передан, то переменная получит значение 2.
Тайп хинтинг (указание типов аргументов)
В PHP 7 появилась полноценная поддержка так называемых тайп хинтов (type hints). Мы можем указать, какой тип данных должен быть у передаваемого в функцию значения:
<?php
function make (int $v1, array $v2)
{
return $v1 . ' ' . $v2;
}
echo make(1, 'текст'); // ошибка, вторым параметром должен быть массив
?>
Если мы передадим в функцию значение, которое можно привести к требуемому типу (например, вместо строки передадим число), значение будет приведено к нужному типу. Если значение привести нельзя (например, массив нельзя превратить в строку), произойдёт ошибка:
<?php
function make(string $v)
{
echo $v;
}
make(1); // Ошибки не будет, число превратится в строку
make([1,2]); // Ошибка, массив нельзя превратить в строку
?>
Тип возвращаемого значения
Ещё одна фишка PHP 7 - возможность указать, какой тип данных должна возвращать функция. Если возможно, возвращаемое значение будет приведено к нужному типу, иначе мы получим ошибку:
<?php
function sum($a, $b): float {
return $a + $b; // Всегда возвращает дробь, даже если результатом будет целое число
}?>
Область видимости функций
Функции в PHP имеют локальную область видимости. Это означает, что внутри функции видны только те переменные, которые были объявлены внутри функции, либо переданы в неё:
<?php
function show()
{
echo $a;
}
$a = 5;
show(); // Ошибка, $a внутри функции не существует
<?php
function edit($a)
{
$a = 10;
}
$a = 5;
edit($a);
// Выведет 5, потому что $a внутри и вне функции - это разные переменные
echo $a;
Глобальные переменные в функциях
Глобальные переменные можно использовать внутри функций с помощью ключевого слова global:
<?php
$var = 5;
function show()
{
global $var; // Указываем, что $var - глобальная
echo $var;
}
show(); // выведет 5
Использование глобальных переменных является плохим тоном. Они делают код неочевидным и запутанным, функции начинают зависеть от внешних факторов.
По возможности никогда не используйте глобальные переменные.
Константы в функциях
В отличие от переменных, константы видны в любой области видимости:
<?php
define('LOGIN', 'admin');
function showLogin()
{
echo LOGIN;
}
showLogin(); // выведет 'admin'