Генерация исключения
Часть раздела Логика и управление потоком путешествия по 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, что упрощает понимание того, что пошло не так, и позволяет отреагировать соответствующим образом.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоВы получите два входных значения: число, представляющее цену, и число, представляющее процент скидки. Оба значения будут предоставлены в виде чисел (цена может быть десятичной дробью, а процент скидки — целым числом от 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 для вызова функции и обработки исключений
// Выведите соответствующий результат
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутые функции
Анонимные функцииЗамыкания и 'use'Стрелочные функцииCallback-функцииИспользование 'call_user_func'Функции переменныхПередача по ссылкеРекурсивные функцииИтоги: ассорти из функций4Многомерные массивы
Создание 2D-массиваДоступ к элементам 2D-массиваИзменение элементов 2D-массиваИтерация с вложенными цикламиДвумерные ассоциативные массивыИтоги: Упражнение «Простая сетка»2Продвинутая работа с массивами
Добавление с помощью 'array_push'Удаление с помощью 'array_pop'Добавление с помощью 'array_unshift'Удаление с помощью 'array_shift'Слияние индексных массивовСлияние ассоциативных массивовИзвлечение с помощью 'array_slice'Поиск значений с 'in_array'Поиск ключей с 'array_search'Итоги: Упражнение «Плейлист»5Журнал успеваемости студентов
Настройка проекта: структура данныхДобавление нового студентаДобавление оценки студентуРасчет среднего балла студентаПоиск лучшего студентаСоздание табеля успеваемости8Обработка ошибок и исключений
Понимание ошибок PHPБлок 'try...catch'Блок 'finally'Генерация исключенияСоздание пользовательского исключенияИспользование пользовательского исключенияИтоги: Валидация входных данных3Сортировка массивов
Сортировка индексных массивов по возрастаниюСортировка индексных массивов по убываниюСортировка ассоциативных массивов по значениюСортировка ассоциативных массивов по ключуСортировка в естественном порядкеПользовательская сортировка с помощью 'usort'Итоги: Сортировка таблицы лидеров