W3docs

Функции 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!

Простая функция, возвращающая значение

Функция без параметров, возвращающая строку:

php— editable, runs on the server

Вывод: Hello, World!

Параметры и аргументы функций

Параметр — это переменная, указанная в определении функции; аргумент — это фактическое значение, передаваемое при вызове. PHP предоставляет несколько способов работы с ними.

Передача аргументов

Следующая функция принимает два параметра и возвращает их сумму. В качестве аргументов передаются 5 и 10.

php— editable, runs on the server

Вывод: 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, с которыми функции часто взаимодействуют.

Практика

Практика
Каковы ключевые характеристики функций в PHP?
Каковы ключевые характеристики функций в PHP?
Was this page helpful?