Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Именованные параметры PHP: Функции

Существует несколько методов передачи данных в функции, и одним из базовых является использование позиционных параметров.

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

Например, возьмем следующую функцию:

<?php

function add(int $x, int $y): int
{
    return $x + $y;
}

Когда мы вызываем эту функцию с фактическими параметрами, например, add(10, 20), параметр $x получает значение 10, а параметр $y — значение 20.

Но в PHP у функций помимо позиционных могут быть еще и именованные параметры. Это особенно полезно при работе с функциями, имеющими много параметров одинакового типа

Например, рассмотрим следующую функцию:

<?php

function calculate(int $base, int $sub, int $mul): int
{
    return ($base - $sub) * $mul;
}

У функции calculate() три параметра: основное значение ($base), значение, что вычитается и значение, на которое происходит умножение. При вызове этой функции, например calculate(10, 3, 2), может быть неочевидно сразу, где какой параметр, ведь их несколько и они одного, числового, типа

<?php

// По вызову не понятно, где какой параметр
calculate(10, 3, 2); // 14

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

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

<?php

// В таком вызове уже очевидно где какой параметр
calculate(base: 10, sub: 3, mul: 2); // 14

В этом случае PHP будет знать, что значение 10 должно быть подставлено в параметр $base, значение 3 — в параметр $sub, а значение 2 — в параметр $mul

Порядок передачи именованных параметров уже не важен. Например, мы можем вызвать нашу функцию так:

<?php

// Можем сделать так
calculate(mul: 2, sub: 3, base: 10); // 14

И PHP все равно подставит правильные значения в соответствующие параметры.

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

<?php

make('circle', 300, 150, 10, null, 2.5, false);

Сравните с этим:

<?php

make(
    shape: 'circle',
    x: 300, y: 150, radius: 10,
    line_pattern: null,
    line_width: 2.5,
    fill: false
);

Такой код читать значительно проще

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

В некоторых случаях параметры функции могут иметь значения по умолчанию. Например, функция json_decode(), которая преобразует строку в формате JSON в PHP значение, имеет несколько параметров со значениями по умолчанию:

<?php

json_decode(
    string $json,
    ?bool $associative = null,
    int $depth = 512,
    int $flags = 0
): mixed

Предположим, при ее вызове нам обязательно нужно установить для параметра $flags значение JSON_THROW_ON_ERROR, чтобы при ошибках преобразования выбрасывалось исключение. Но все остальные необязательные параметры нам устанавливать не нужно. С использованием позиционных аргументов вызов функции выглядел бы так:

<?php

json_decode(
    '{"key": "value"}',
    null,
    512,
    JSON_THROW_ON_ERROR
);

Одним из преимуществ именованных аргументов является возможность пропускать при вызове функции параметры, которые имеют значения по умолчанию. Это позволяет вызывать функции, указывая только те параметры, которые нам действительно нужны, и игнорируя остальные. Сравните, как будет выглядеть вызов этой функции с использованием именованных параметров:

<?php

json_decode(
    json: '{"key": "value"}',
    flags: JSON_THROW_ON_ERROR
);

Именованные аргументы сделали вызов функции более читаемым и лаконичным

Сочетание позиционных и именованных параметров

Мы можем сочетать позиционные и именованные параметры при вызове функции. Главное правило здесь — именованные аргументы должны идти после позиционных. Это позволяет нам передавать обязательные параметры в правильном порядке, а затем указывать значения для необязательных параметров с помощью их имен.

Например, в функции json_decode() первый параметр, строка JSON, обязательный, а все остальные — нет. Мы можем вызвать функцию так:

<?php

// Позиционный параметр идет первым
json_decode('{"key": "value"}', flags: JSON_THROW_ON_ERROR);

Мы передали обязательный параметр первым, как позиционный, а затем указали только необходимые нам необязательные параметры по имени

Выводы

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

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


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 21 ноября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»