Именованные аргументы, появившиеся в PHP 8, сильно упрощают работу с функциями, у которых много параметров. Вместо того чтобы запоминать их порядок, можно передавать значения, указывая имя параметра. Это делает код чище и понятнее. Больше не нужно передавать `null` для необязательных аргументов, которые вы хотите пропустить. В этом тренажере мы разберемся, как использовать именованные аргументы, научимся комбинировать их с обычными (позиционными) и избегать частых ошибок. Задания построены от простого знакомства с синтаксисом до более сложных случаев.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
- Union types.
- Named arguments.
Основы синтаксиса именованных аргументов
Вызовите функцию `createUser`, передав ей имя и возраст пользователя с помощью именованных аргументов. Обратите внимание на синтаксис: после имени аргумента должно стоять двоеточие, а затем значение.
function createUser(string $name, int $age, string $country = 'USA') {
return "Created user $name, age $age, from $country.";
}
// Вызовите функцию, используя имена аргументов 'name' и 'age'
echo createUser(input1S: 'Alice', input2S: 30);Исправьте ошибку в вызове функции
В коде допущена распространённая ошибка при использовании именованных аргументов. Вместо правильного оператора используется знак равенства. Найдите и исправьте строку с вызовом функции.
function setCookie(string $name, string $value, int $expires = 0) { // some logic to set a cookie echo "Cookie '$name' is set.";} // Неправильный вызов функцииsetCookie(name = "user", value = "John");Предскажите результат при измененном порядке
Одно из главных преимуществ именованных аргументов — независимость от порядка. Проанализируйте код и определите, какой результат он вернет, несмотря на то, что аргументы переданы не в том порядке, в котором они объявлены.
function calculatePrice(int $quantity, float $price, float $discount = 0) {
return ($quantity * $price) * (1 - $discount);
}
// Аргументы переданы в произвольном порядке
echo calculatePrice(discount: 0.1, quantity: 10, price: 5.0);Соберите вызов функции из частей
Соберите из разбросанных частей кода работающий скрипт. Сначала нужно объявить переменную, а затем вызвать функцию `htmlspecialchars`, используя именованные аргументы, чтобы экранировать содержимое переменной.
flags: ENT_QUOTES$userInput = "<danger>";);echo htmlspecialchars(string: $userInput,string = $userInput,echo $userInput;Пропуск необязательных параметров
Именованные аргументы позволяют легко пропускать необязательные параметры. В данном примере нужно вызвать функцию `sendEmail`, указав только обязательные аргументы и последний — `priority`, пропустив `from`. Заполните пропуск, чтобы задать приоритет.
function sendEmail(
string $to,
string $subject,
string $body,
string $from = 'noreply@example.com',
int $priority = 3
) {
return "Email to $to with priority $priority sent from '$from'.";
}
// Отправляем письмо с высоким приоритетом, пропуская 'from'
echo sendEmail(
to: 'test@example.com',
subject: 'Important',
body: 'Please review.',
input1S: 1
);Комбинация позиционных и именованных аргументов
PHP позволяет смешивать позиционные и именованные аргументы, но с одним важным правилом: все позиционные аргументы должны идти до именованных. Определите, что выведет данный код, и впишите результат в поле ответа.
function format_user(string $name, string $role, int $id) {
return "User: $name (ID: $id), Role: $role";
}
echo format_user('John Doe', id: 123, role: 'Admin');Критическая ошибка: позиционный после именованного
Этот код содержит фатальную ошибку, нарушающую главное правило смешивания аргументов. Нельзя передавать позиционный аргумент после именованного. Найдите и исправьте строку с вызовом функции, чтобы код стал рабочим.
function set_options(bool $verbose, string $mode = 'fast') { if ($verbose) { echo "Verbose mode is ON. Mode: $mode"; }} // Этот вызов вызовет Fatal errorset_options(mode: 'slow', true);Сопоставьте вызов функции и результат
Перед вами одна и та же функция `create_tag`, но вызывается она тремя разными способами: классическим позиционным, полностью именованным и смешанным. Сопоставьте каждый вызов (левая колонка) с правильным HTML-тегом, который он сгенерирует (правая колонка).
// function create_tag(string $name, string $content, string $class = 'default')create_tag('p', 'Hello');create_tag(content: 'World', name: 'div');create_tag('span', 'Alert', class: 'warning');Соберите вызов array_slice из банка
Используя именованные аргументы, вызов стандартных функций PHP с большим количеством параметров становится намного нагляднее. Соберите вызов функции `array_slice` из предложенных в банке частей, чтобы получить срез массива.
$input = ['a', 'b', 'c', 'd', 'e'];
// Цель: получить срез ['c', 'd']
// Это значит, взять 2 элемента, начиная со смещения 2 (третий элемент)
$output = array_slice(
input1S: input2S,
input3S: 2,
input4S: 2
);
// var_dump($output) выведет: array(2) { [0]=> string(1) "c" [1]=> string(1) "d" }