/
Программирование
/
Курс PHP
/

Создание (определение) функций

PHP: Создание (определение) функций

До этого момента мы использовали только уже готовые функции: print_r(), strlen(), round() и другие. Но в PHP можно создавать свои собственные функции и пришла пора научиться это делать.

Зачем определять функции

Допустим, у нас есть несколько похожих участков кода:

<?php

print_r("Hello, Hexlet!\n");
print_r("Hello, world!\n");
print_r("Hello, PHP!\n");

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

<?php

function sayHello($name)
{
    print_r("Hello, {$name}!\n");
}

Теперь мы можем вызывать ее с разными аргументами:

<?php

sayHello('Hexlet'); // => Hello, Hexlet!
sayHello('world');  // => Hello, world!
sayHello('PHP');    // => Hello, PHP!

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

Определение собственных функций значительно упрощает поддержку программ еще и потому, что позволяет объединять сложные операции в одну. Например, отправка письма на сайте — это достаточно сложный процесс, который включает взаимодействие с внешними системами. Но вся сложность может быть скрыта за одной простой функцией send($email, $title, $body). Один маленький вызов — и много логики внутри.

Синтаксис определения

function имяФункции(параметры)
{
    тело
}
function greet($name)             ← ключевое слово, имя функции и параметр
{
    return 'Hello, ' . $name;     ← тело функции
}

Ключевое слово function начинает определение. В имяФункции допускается любое имя, как у переменной (но без знака $); в скобках указывается список параметров через запятую. Тело функции заключается в фигурные скобки, внутри пишется обычный PHP-код.

В отличие от обычных данных, функции выполняют действия, поэтому их имена практически всегда должны быть глаголами: «построить что-то», «нарисовать что-то», «открыть что-то».

Фигурные скобки показывают, какой код относится к телу функции. Посмотрите на пример:

<?php

function sayHi()
{
    print_r('Hi!');
}

print_r('Программа продолжается…');

Здесь функция sayHi() определена, но print_r('Программа продолжается…') не относится к функции, так как находится вне фигурных скобок. Он будет выполнен сразу при запуске программы, независимо от вызова sayHi(). Само определение не вызывает и не выполняет функцию — мы лишь говорим, что теперь такая функция существует.

Чтобы sayHi() сработала, ее нужно явно вызвать:

<?php

function sayHi()
{
    print_r('Hi!');
}

sayHi(); // => Hi!
print_r('Программа продолжается…');

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

<?php

// Минимальное определение функции, которая ничего не делает
function noop() {}

noop(); // Вызов есть, а смысла нет
// Такая функция тоже бывает полезна,
// но это относится к продвинутым темам

Пример: функция для печати среднего арифметического

Сейчас мы реализуем простую функцию, которая вычисляет и печатает среднее арифметическое двух чисел. Среднее арифметическое представляет собой сумму чисел, деленную на их количество. Например, среднее от 6 и 4 считается так: (6 + 4) / 2 = 5.

<?php

function printAverage($a, $b)
{
    $total = $a + $b;
    $average = $total / 2;
    print_r($average);
}

printAverage(6, 4); // => 5

Здесь $a и $b являются входными параметрами, $total содержит их сумму, $average получается делением суммы на 2, а print_r() выводит результат.

При вызове printAverage(6, 4) на экран выведется 5.

Переиспользование и читаемость

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

Кстати, создание функции еще называют реализацией, определением и имплементацией. Такие слова часто встречаются на практике.

Задание

Сайт выводит приветствие для каждого посетителя. Реализуйте функцию sayHello(), которая выводит на экран фразу Hello, World!.

<?php

sayHello(); // => Hello, World!

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

Полезное

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются