Функции в 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).
Закрепите практикой
Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.