Menu
Coddy logo textTech

Генерация исключения

Часть раздела Логика и управление потоком путешествия по PHP на Coddy — урок 55 из 68.

Иногда вам нужно просигнализировать о том, что в вашем коде что-то пошло не так, и остановить обычное выполнение. Ключевое слово throw позволяет вам вручную создавать и вызывать исключение, давая вам контроль над тем, когда и почему ваша программа должна обрабатывать ошибочное состояние.

Когда вы выбрасываете исключение, вы создаете новый объект Exception и передаете ему описательное сообщение о том, что пошло не так. Это исключение немедленно остановит выполнение текущего кода и будет искать блок catch для его обработки.

<?php
function checkAge($age) {
    if ($age < 0) {
        throw new Exception("Age cannot be negative");
    }
    echo "Age is valid: " . $age;
}

try {
    checkAge(-5);
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}
?>

Инструкция throw требует синтаксиса new Exception(), где вы передаете строковое сообщение, описывающее проблему. Это сообщение позже можно получить с помощью метода getMessage() в вашем блоке catch, что упрощает понимание того, что пошло не так, и позволяет отреагировать соответствующим образом.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

challenge icon

Задание

Легко

Вы получите два входных значения: число, представляющее цену, и число, представляющее процент скидки. Оба значения будут предоставлены в виде чисел (цена может быть десятичной дробью, а процент скидки — целым числом от 0 до 100).

Прочитайте оба входных значения и создайте функцию с именем calculateFinalPrice, которая принимает два параметра: цену и процент скидки. Внутри этой функции проверьте, не превышает ли процент скидки 100 и не меньше ли он 0. Если любое из этих условий истинно, выбросьте новое исключение Exception с сообщением "Invalid discount percentage". Если скидка корректна, рассчитайте итоговую цену после применения скидки и верните её.

Используйте блок try...catch для вызова функции с полученными входными данными. В блоке try вызовите функцию и выведите "Final price: ", а затем рассчитанную итоговую цену. В блоке catch обработайте исключение, выведя "Error: ", а затем сообщение об исключении, используя метод getMessage().

Формат входных данных:

  • Первая строка: Число, представляющее цену (например: 100 или 49.99)
  • Вторая строка: Целое число, представляющее процент скидки (например: 20 или 150)

Ожидаемый результат:

  • Если скидка корректна: Final price: и рассчитанная цена после скидки
  • Если скидка некорректна: Error: Invalid discount percentage

Шпаргалка

Используйте ключевое слово throw для создания и генерации исключений вручную:

throw new Exception("Error message");

Когда исключение сгенерировано, оно останавливает обычное выполнение и ищет блок catch для его обработки:

<?php
function checkAge($age) {
    if ($age < 0) {
        throw new Exception("Age cannot be negative");
    }
    echo "Age is valid: " . $age;
}

try {
    checkAge(-5);
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}
?>

Используйте метод getMessage() в блоке catch, чтобы получить сообщение об исключении.

Попробуйте сами

<?php
// Чтение входных данных
$price = floatval(fgets(STDIN));
$discountPercentage = intval(fgets(STDIN));

// TODO: Напишите ваш код ниже
// Создайте функцию calculateFinalPrice
// Используйте блок try...catch для вызова функции и обработки исключений
// Выведите соответствующий результат

?>
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком