Функции PHP: понимание и применение в коде
Функции — важная концепция в программировании. В PHP они играют ключевую роль в создании модульного, повторно используемого и организованного кода.
Функция — это именованный блок кода, выполняющий определённую задачу. Функции являются одними из важнейших строительных блоков в PHP: они позволяют написать логику один раз и использовать её повсюду, не копируя один и тот же код во множество мест. На этой странице рассматривается, как определять и вызывать функции, как передавать аргументы (включая значения по умолчанию, типизированные, по ссылке и переменное число аргументов), как работают возвращаемые значения и правила области видимости, определяющие, какие переменные доступны функции.
Что такое функция PHP?
Функция PHP — это повторно используемый блок кода, который запускается только при его вызове. Функция объявляется с помощью ключевого слова function, за которым следует имя, пара круглых скобок со списком параметров (входных данных, которые принимает функция) и тело, заключённое в { }. Функция может при желании возвращать значение с помощью ключевого слова return.
Общая форма функции выглядит так:
function functionName($parameter1, $parameter2) {
// code to run when the function is called
return $result; // optional
}Несколько правил именования: имя функции должно начинаться с буквы или символа подчёркивания, может содержать буквы, цифры и символы подчёркивания, и не чувствительно к регистру (sayHello() и SayHello() вызывают одну и ту же функцию). По соглашению в современном PHP-коде для пользовательских функций принято использовать camelCase или snake_case.
Зачем использовать функции PHP?
Использование функций даёт несколько конкретных преимуществ:
- Повторное использование. Напишите логику один раз и вызывайте её столько раз, сколько нужно. Для изменения поведения достаточно отредактировать одно место, а не искать все копии кода.
- Читаемость. Хорошо названная функция (
calculateTax()) говорит читателю что происходит, не заставляя его разбираться как. - Модульность. Разбивка сложной задачи на небольшие функции делает каждую часть проще для понимания, тестирования и отладки.
- Меньше ошибок. Меньше дублированного кода — меньше мест, где может скрыться одна и та же ошибка.
Как определить и вызвать функцию
Само по себе определение функции ничего не делает — тело запускается только при вызове функции: нужно написать её имя и круглые скобки. В примере ниже определяется функция без параметров, которая затем вызывается дважды.
<?php
function greet() {
echo "Hello from a function!\n";
}
greet(); // call it
greet(); // call it again
?>Вывод:
Hello from a function!
Hello from a function!Простая функция, возвращающая значение
Функция без параметров, возвращающая строку:
Вывод: Hello, World!
Параметры и аргументы функций
Параметр — это переменная, указанная в определении функции; аргумент — это фактическое значение, передаваемое при вызове. PHP предоставляет несколько способов работы с ними.
Передача аргументов
Следующая функция принимает два параметра и возвращает их сумму. В качестве аргументов передаются 5 и 10.
Вывод: 15
Значения параметров по умолчанию
Параметр может иметь значение по умолчанию, которое используется, если вызывающий код не передаёт этот аргумент. Параметры со значениями по умолчанию должны располагаться после обязательных.
<?php
function greet($name, $greeting = "Hello") {
return "$greeting, $name!";
}
echo greet("Anna") . "\n"; // uses the default greeting
echo greet("Anna", "Welcome"); // overrides the default
?>Вывод:
Hello, Anna!
Welcome, Anna!Объявления типов
Можно объявить ожидаемый тип каждого параметра и возвращаемого значения. Это делает функцию самодокументируемой и позволяет PHP выбрасывать ошибку при получении неправильного типа.
<?php
function multiply(int $a, int $b): int {
return $a * $b;
}
echo multiply(4, 3);
?>Вывод: 12
Передача аргументов по ссылке
По умолчанию PHP передаёт аргументы по значению — функция работает с копией, и исходная переменная остаётся неизменной. Поставьте перед параметром &, чтобы передать его по ссылке, позволяя функции напрямую изменять переменную вызывающего кода.
<?php
function addOne(&$number) {
$number++;
}
$count = 10;
addOne($count);
echo $count;
?>Вывод: 11
Списки аргументов переменной длины
Когда заранее неизвестно, сколько аргументов будет передано, оператор ... (splat) собирает их все в массив.
<?php
function sumAll(...$numbers) {
return array_sum($numbers);
}
echo sumAll(1, 2, 3, 4, 5);
?>Вывод: 15
Возвращаемые значения
Функция возвращает значение с помощью ключевого слова return. return также немедленно останавливает функцию — любой код после него пропускается. Функция без return (или return; без значения) возвращает null. Чтобы вернуть несколько значений одновременно, верните массив (или используйте list() для распаковки на принимающей стороне).
<?php
function minMax($a, $b) {
if ($a < $b) {
return [$a, $b]; // returns and exits here
}
return [$b, $a];
}
[$min, $max] = minMax(8, 3);
echo "Min: $min, Max: $max";
?>Вывод: Min: 3, Max: 8
Более подробное рассмотрение этой темы см. в главе об операторе return в PHP.
Область видимости переменных
Переменные, созданные внутри функции, являются локальными для неё — они не существуют за её пределами, и функция не может видеть переменные, определённые во внешней (глобальной) области видимости, если только не импортировать их с помощью ключевого слова global или не передать как аргументы.
<?php
$message = "outside";
function showScope() {
// $message from the global scope is NOT visible here
$message = "inside";
echo $message;
}
showScope(); // prints the local value
echo "\n";
echo $message; // prints the global value, untouched
?>Вывод:
inside
outsideОбласть видимости — распространённый источник путаницы для начинающих — глава об области видимости переменных PHP подробно объясняет global, static и локальные переменные. Также смотрите главу о переменных PHP для изучения основ.
Распространённые ошибки
- Вызов функции без использования возвращаемого значения — помните, что
returnлишь отдаёт значение; его ещё нужно вывести черезechoили сохранить.add(5, 10);само по себе ничего не отобразит. - Размещение параметра со значением по умолчанию перед обязательным — PHP требует, чтобы параметры со значениями по умолчанию шли последними.
- Ожидание, что изменения «просочатся» наружу — без
&изменение параметра внутри функции не затрагивает переменную вызывающего кода. - Повторное объявление имени функции — нельзя определить две функции с одинаковым именем; PHP выбрасывает фатальную ошибку.
Заключение
Функции PHP — это основа организованного, повторно используемого кода. Освоив определение функций, передачу аргументов (со значениями по умолчанию, типами, ссылками и переменным числом аргументов), возврат значений и работу с областью видимости, вы сможете разбивать любую сложную задачу на чистые, тестируемые части. Далее изучите работу с массивами PHP и строками PHP, с которыми функции часто взаимодействуют.