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

Александр Кичатов

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'

Комментарии