Именованные аргументы (PHP 8)

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

Тренажер PHP

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

Список тем

Базовый синтаксис именованных аргументов

id: 38996_task1

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

Заполните пропуски
function createUser(string $name, int $age, string $email) {
    return "User: $name, Age: $age, Email: $email";
}

// Используйте именованные аргументы для вызова функции
 $user = createUser(
    input1S: "John",
    input2S: 25,
    input3S: "john@example.com"
);

echo $user;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Порядок именованных аргументов

id: 38996_task2

Что выведет код, в котором именованные аргументы переданы в разном порядке?

Выберите правильный вариант ответа
function calculateArea(float $width, float $height) {
    return $width * $height;
}

// Вызываем функцию с аргументами в разном порядке
 $area1 = calculateArea(width: 5, height: 10);
 $area2 = calculateArea(height: 10, width: 5);

echo "Area1: $area1, Area2: $area2";
Сообщения
Проверить
Показать подсказку

Найдите ошибку в именованных аргументах

id: 38996_task3

Найдите и исправьте ошибку в коде, который использует именованные аргументы.

Найдите ошибку и исправьте
<?php
function registerUser(string $username, string $password, bool $active = true) {
    return "User $username registered with status: " . ($active ? "active" : "inactive");
}
 
// Вызов функции с ошибкой
 $result = registerUser(user_name: "admin", pass: "secret123", active: false);
echo $result;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

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

id: 38996_task4

Используйте именованные аргументы, чтобы пропустить необязательный параметр и задать только последний.

Заполните пропуски
function sendEmail(string $to, string $subject, string $body, int $priority = 1, bool $urgent = false) {
    return "Email sent to: $to, Subject: $subject, Priority: $priority, Urgent: " . ($urgent ? "Yes" : "No");
}

// Пропустите параметр priority и укажите только urgent
 $result = sendEmail(
    to: "user@example.com",
    subject: "Important notice",
    body: "Please read this message",
    input1S: true
);

echo $result;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Соберите функцию с именованными аргументами

id: 38996_task5

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

Перетяните в правильном порядке строки из одного блока в другой
return $name . " is " . $age . " years old";
 $person = getPersonInfo(age: 30, name: "Alice");
function getPersonInfo(string $name, int $age) {
echo $person;
}
<?php
echo "Simple function";
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Использование именованных аргументов с массивами

id: 38996_task6

Заполните пропуски в коде, используя именованные аргументы для работы с массивами.

Нужно правильно расставить в пропуски предложенные варианты
function processArray(array $data, bool $sort = false, int $limit = 10, string $key = null) {
    if ($sort) {
        sort($data);
    }
    
    if ($key !== null && isset($data[$key])) {
        return $data[$key];
    }
    
    return array_slice($data, 0, $limit);
}

 $sample = ['apple', 'banana', 'cherry', 'date', 'elderberry'];

// Используйте именованные аргументы для получения элемента по ключу
 $result = processArray(
    input1S: $sample,
    input2S: 2
);

echo $result;
data
key
sort
limit
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Смешение позиционных и именованных аргументов

id: 38996_task7

Определите, что выведет код, в котором смешиваются позиционные и именованные аргументы.

Что должно получиться?
function createProduct(string $name, float $price, int $quantity, bool $available = true) {
    $total = $price * $quantity;
    $status = $available ? "Available" : "Out of stock";
    return "$name: $status, Total: $$total";
}

// Смешиваем позиционные и именованные аргументы
 $product = createProduct("Laptop", 999.99, quantity: 5);

echo $product;
Сообщения
Проверить
Показать подсказку

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

id: 38996_task8

Сопоставьте способы вызова функций с их описаниями.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Традиционный вызов с позиционными аргументами
Вызов с использованием только именованных аргументов
Смешанный вызов: сначала позиционные, затем именованные
calculateArea(5, 10)
calculateArea(width: 5, height: 10)
calculateArea(5, height: 10)
Сообщения
Проверить
Показать подсказку

Именованные аргументы в конструкторах классов

id: 38996_task9

Используйте именованные аргументы при создании объекта класса.

Заполните пропуски
class User {
    public function __construct(
        public string $name,
        public string $email,
        public int $age,
        public bool $active = true
    ) {}
    
    public function getInfo(): string {
        $status = $this->active ? "Active" : "Inactive";
        return "$this->name ($this->email), Age: $this->age, Status: $status";
    }
}

// Создайте объект с использованием именованных аргументов
 $user = new User(
    input1S: "john@example.com",
    input2S: 30,
    input3S: "John"
);

echo $user->getInfo();
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Ошибка при смешении аргументов

id: 38996_task10

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

Найдите ошибку и исправьте
<?php
function displayMessage(string $title, string $text, string $author, bool $published = false) {
    $status = $published ? "Published" : "Draft";
    return "$title by $author: $text [$status]";
}
 
// Вызов функции с ошибкой
 $message = displayMessage("Notice", text: "Important update", "Admin");
echo $message;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Именованные аргументы и variadic-функции

id: 38996_task11

Что выведет код, использующий именованные аргументы с variadic-функцией?

Выберите правильный вариант ответа
function processOrder(int $orderId, ...$items) {
    $result = "Order #$orderId: ";
    
    foreach ($items as $key => $value) {
        $result .= "$key=$value ";
    }
    
    return trim($result);
}

// Вызов с именованными аргументами
 $order = processOrder(1234, product: "Laptop", quantity: 2, price: 999.99);

echo $order;
Сообщения
Проверить
Показать подсказку

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

id: 38996_task12

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

Расставьте строки в правильном порядке
return "Rectangle with width $width and height $height has area: " . ($width * $height);
echo $area;
 $area = calculateRectangle(height: 8, width: 5);
function calculateRectangle(int $width, int $height) {
<?php
}
// Вычисление площади прямоугольника
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру