Named arguments

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Именованные аргументы, появившиеся в PHP 8, сильно упрощают работу с функциями, у которых много параметров. Вместо того чтобы запоминать их порядок, можно передавать значения, указывая имя параметра. Это делает код чище и понятнее. Больше не нужно передавать `null` для необязательных аргументов, которые вы хотите пропустить. В этом тренажере мы разберемся, как использовать именованные аргументы, научимся комбинировать их с обычными (позиционными) и избегать частых ошибок. Задания построены от простого знакомства с синтаксисом до более сложных случаев.

Список тем

Основы синтаксиса именованных аргументов

id: 39387_task_named_args_1

Вызовите функцию `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);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправьте ошибку в вызове функции

id: 39387_task_named_args_2

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

Найдите ошибку и исправьте
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");
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Предскажите результат при измененном порядке

id: 39387_task_named_args_3

Одно из главных преимуществ именованных аргументов — независимость от порядка. Проанализируйте код и определите, какой результат он вернет, несмотря на то, что аргументы переданы не в том порядке, в котором они объявлены.

Выберите правильный вариант ответа
function calculatePrice(int $quantity, float $price, float $discount = 0) {
    return ($quantity * $price) * (1 - $discount);
}

// Аргументы переданы в произвольном порядке
echo calculatePrice(discount: 0.1, quantity: 10, price: 5.0);
Сообщения
Проверить
Показать подсказку

Соберите вызов функции из частей

id: 39387_task_named_args_4

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

Перетяните в правильном порядке строки из одного блока в другой
flags: ENT_QUOTES
$userInput = "<danger>";
);
echo htmlspecialchars(
string: $userInput,
string = $userInput,
echo $userInput;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Пропуск необязательных параметров

id: 39387_task_named_args_5

Именованные аргументы позволяют легко пропускать необязательные параметры. В данном примере нужно вызвать функцию `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
);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Комбинация позиционных и именованных аргументов

id: 39387_task_named_args_6

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');
Сообщения
Проверить
Показать подсказку

Критическая ошибка: позиционный после именованного

id: 39387_task_named_args_7

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

Найдите ошибку и исправьте
function set_options(bool $verbose, string $mode = 'fast') {
    if ($verbose) {
        echo "Verbose mode is ON. Mode: $mode";
    }
}
 
// Этот вызов вызовет Fatal error
set_options(mode: 'slow', true);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сопоставьте вызов функции и результат

id: 39387_task_named_args_8

Перед вами одна и та же функция `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');
&lt;div class="default"&gt;World&lt;/div&gt;
&lt;span class="warning"&gt;Alert&lt;/span&gt;
&lt;p class="default"&gt;Hello&lt;/p&gt;
Сообщения
Проверить
Показать подсказку

Соберите вызов array_slice из банка

id: 39387_task_named_args_9

Используя именованные аргументы, вызов стандартных функций 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" }
array
$input
offset
length
$output
preserve_keys
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру