Функции в PHP

Функция — это именованный блок кода, который можно вызывать сколько угодно раз. Функции избавляют от копирования одинакового кода и делают программу понятнее: вместо двадцати строк расчёта достаточно одного вызова calculateTotal().

Объявление и вызов функции

Функция объявляется ключевым словом function, а вызывается по имени с круглыми скобками:

<?php
function sayHello() {
    echo "Привет, CodeChick!\n";
}

sayHello(); // Вывод: Привет, CodeChick!
sayHello(); // Вывод: Привет, CodeChick!

Код внутри функции не выполняется, пока её не вызовут. Зато вызывать можно сколько угодно раз.

Параметры и аргументы

Чтобы функция работала с разными данными, ей передают параметры — переменные, перечисленные в скобках при объявлении:

<?php
function greet($name) {
    echo "Привет, $name!\n";
}

greet("Анна");  // Вывод: Привет, Анна!
greet("Борис"); // Вывод: Привет, Борис!

Значения по умолчанию

Параметру можно задать значение на случай, если аргумент не передали:

<?php
function makeCoffee($type = "американо") {
    echo "Готовим $type\n";
}

makeCoffee();           // Вывод: Готовим американо
makeCoffee("капучино"); // Вывод: Готовим капучино

Именованные аргументы (PHP 8)

В PHP 8 аргументы можно передавать по имени — удобно, когда параметров много и не хочется помнить их порядок:

<?php
function createUser($name, $role = "user", $active = true) {
    echo "$name, роль: $role, активен: " . ($active ? "да" : "нет");
}

createUser("Анна", active: false);
// Вывод: Анна, роль: user, активен: нет

Возврат значения: return

Функция может не печатать результат, а возвращать его оператором return — тогда результат можно сохранить в переменную или передать дальше:

<?php
function add($a, $b) {
    return $a + $b;
}

$sum = add(2, 3);
echo $sum;          // Вывод: 5
echo add($sum, 10); // Вывод: 15

return сразу завершает функцию — код после него не выполнится.

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

Типизация параметров и результата

Современный PHP позволяет (и рекомендует) указывать типы параметров и возвращаемого значения. Это документация и защита от ошибок одновременно:

<?php
function applyDiscount(float $price, int $percent): float {
    return $price - $price * $percent / 100;
}

echo applyDiscount(1000, 15); // Вывод: 850

// applyDiscount("много", 15); // TypeError: ожидается float

Если функция ничего не возвращает, указывают тип void, а если значение может быть null — ставят знак вопроса: ?string.

Область видимости

Переменные внутри функции живут только внутри неё и не видят внешние переменные:

<?php
$counter = 10;

function increment() {
    $counter = 0; // это другая, локальная переменная
    $counter++;
    return $counter;
}

echo increment(); // Вывод: 1
echo $counter;    // Вывод: 10 — внешняя не изменилась

Нужные данные передавайте через параметры, а результат забирайте через return — так функция остаётся предсказуемой.

Анонимные и стрелочные функции

Функцию можно сохранить в переменную без имени — это анонимная функция:

<?php
$square = function ($n) {
    return $n * $n;
};

echo $square(4); // Вывод: 16

Стрелочные функции (PHP 7.4+) — компактная форма для однострочных выражений. Они автоматически видят переменные из внешней области:

<?php
$rate = 1.2;
$withTax = fn($price) => $price * $rate;

echo $withTax(100); // Вывод: 120

Чаще всего стрелочные функции встречаются вместе с array_map() и array_filter():

<?php
$nums = [1, 2, 3, 4, 5];

$even = array_filter($nums, fn($n) => $n % 2 === 0);
print_r($even);
// Вывод: Array ( [1] => 2 [3] => 4 )

Практический пример

<?php
function formatPrice(float $price, string $currency = "руб."): string {
    return number_format($price, 2, ",", " ") . " " . $currency;
}

function cartTotal(array $items): float {
    return array_sum($items);
}

$cart = [2500, 1200, 400];

echo formatPrice(cartTotal($cart));
// Вывод: 4 100,00 руб.

Что мы узнали

  • Функция объявляется через function и выполняется только при вызове.
  • Данные передаются через параметры; у них могут быть значения по умолчанию.
  • return возвращает результат и сразу завершает функцию.
  • Типы параметров и результата (int, float, string, ?string, void) делают код надёжнее.
  • Переменные внутри функции локальны — внешние значения передаём аргументами.
  • Анонимные и стрелочные функции fn() => удобны для коротких операций и работы с массивами.
  • В PHP 8 аргументы можно передавать по имени: createUser("Анна", active: false).
Проверьте себя
1. Что делает оператор `return` внутри функции PHP?
AВыводит значение на экран
BВозвращает значение вызывающему коду и завершает выполнение функции
CПродолжает выполнение со следующей строки после return
DСохраняет значение в глобальной переменной
2. Что выведет вызов `makeCoffee()` для функции `function makeCoffee($type = "американо") { echo $type; }`?
Anull
BОшибка: аргумент не передан
Cамерикано
D
3. Зачем указывать типы параметров в функции PHP, например `function add(int $a, int $b): int`?
AЭто обязательно — без типов PHP не запустит функцию
BТипы ускоряют выполнение в 10 раз
CЭто документация и защита: PHP бросит TypeError при передаче значения неправильного типа
DТипы нужны только для объектов, не для примитивов
4. Видит ли функция в PHP переменные, объявленные вне неё?
AДа, все внешние переменные доступны внутри функции автоматически
BНет, функция имеет собственную область видимости и не видит внешние переменные
CДа, но только переменные с именами из одного символа
DНет, кроме переменных, начинающихся с $_

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.

Поддержать проект