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

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

Тренажер PHP

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

Список тем

Ваш первый параметр по умолчанию

id: 38987_task_replace_1

Сделаем функцию `greet` более универсальной. Если имя пользователя не передано при вызове, она должна выводить приветствие для 'Guest'. Дополните объявление функции, задав значение по умолчанию для параметра `$name`.

Заполните пропуски
<?php
// Добавьте '= 'Guest'' к параметру
function greet($name input1S) {
    echo "Hello, $name!";
}

greet(); // Вызовет функцию со значением по умолчанию
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Переопределение значения по умолчанию

id: 38987_task_predict_1

Значение по умолчанию используется только тогда, когда аргумент не передан. Если же аргумент указан, будет использовано именно переданное значение. Что выведет этот код?

Выберите правильный вариант ответа
<?php
function sendMessage($text = 'Hello') {
    echo $text;
}

sendMessage('Hi there!');
?>
Сообщения
Проверить
Показать подсказку

Числовое значение по умолчанию

id: 38987_task_give_result_1

Функция `calculateBonus` рассчитывает бонус сотрудника. Если процент не указан, он по умолчанию равен 10% (0.1). Какой бонус будет рассчитан для зарплаты в 50000, если процент не передавать? Введите только число.

Что должно получиться?
<?php
function calculateBonus($salary, $rate = 0.1) {
    return $salary * $rate;
}

echo calculateBonus(50000);
?>
Сообщения
Проверить
Показать подсказку

Главное правило: порядок параметров

id: 38987_task_error_1

В PHP есть строгое правило: все обязательные параметры (без значения по умолчанию) должны быть объявлены перед необязательными (со значением по умолчанию). В этом коде правило нарушено, что приведет к фатальной ошибке. Исправьте объявление функции, поменяв параметры местами.

Найдите ошибку и исправьте
<?php
// Неправильный порядок параметров
function applySettings($theme = 'dark', $userId) {
    echo "Settings for user $userId, theme: $theme";
}
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

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

id: 38987_task_bank_1

Функция `createPost` может принимать название и статус публикации. Сделайте оба параметра необязательными: `$title` по умолчанию должен быть 'New Post', а `$isPublished` — `false`. Соберите объявление функции из токенов.

Нужно правильно расставить в пропуски предложенные варианты
<?php
function createPost(input1S, input2S) {
    // ... логика создания поста
}
?>
$title = 'New Post'
$isPublished = false
$isPublished = 'false'
$title
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Использование null как значения по умолчанию

id: 38987_task_predict_2

Часто `null` используется как значение по умолчанию, чтобы проверить, был ли аргумент передан. Что выведет этот код, если функция `findRecord` вызвана только с одним, обязательным аргументом?

Выберите правильный вариант ответа
<?php
function findRecord($id, $cache = null) {
    if ($cache === null) {
        return "Search without cache";
    } else {
        return "Search with cache";
    }
}

echo findRecord(123);
?>
Сообщения
Проверить
Показать подсказку

Типизация и значения по умолчанию

id: 38987_task_replace_2

Совместим две мощные возможности PHP: строгую типизацию и значения по умолчанию. Дополните объявление функции `setAttempts`, указав, что параметр `$count` должен быть целым числом (`int`) со значением по умолчанию 3.

Заполните пропуски
<?php
declare(strict_types=1);

function setAttempts(input1S $count input2S 3) {
    echo "Количество попыток: $count";
}

setAttempts();
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Частичное переопределение

id: 38987_task_give_result_2

Функция `makeUrl` имеет два необязательных параметра. Мы вызываем ее, передавая аргумент для первого из них (`$path`), но не для второго (`$protocol`). Какой URL в итоге будет создан? Введите полный URL в поле ответа.

Что должно получиться?
<?php
function makeUrl($domain, $path = '/', $protocol = 'https') {
    return $protocol . '://' . $domain . $path;
}

echo makeUrl('site.com', '/news');
?>
Сообщения
Проверить
Показать подсказку

Недопустимые значения по умолчанию

id: 38987_task_error_2

Значением по умолчанию может быть только константное выражение (например, число, строка, `null`). Использование переменной, как в этом коде, недопустимо и вызовет ошибку. Исправьте код, заменив переменную `$defaultStatus` на её строковое значение 'pending'.

Найдите ошибку и исправьте
<?php
$defaultStatus = 'pending';
 
function createTask($title, $status = $defaultStatus) {
    return "Task '$title' has status '$status'.";
}
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру