Использование пользовательского исключения
Часть раздела Логика и управление потоком путешествия по PHP на Coddy — урок 57 из 68.
Теперь, когда вы создали свой собственный класс исключения, пришло время применить его на практике. Использование пользовательского исключения включает в себя два основных этапа: генерацию вашего конкретного типа исключения при возникновении проблемы и перехват этого конкретного типа исключения для его надлежащей обработки.
Когда вы выбрасываете пользовательское исключение, вы используете то же ключевое слово throw, но создаете экземпляр своего пользовательского класса вместо общего класса Exception. Это делает вашу обработку ошибок более точной и осмысленной.
<?php
class InvalidEmailException extends Exception {}
function validateEmail($email) {
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new InvalidEmailException("Invalid email format: " . $email);
}
echo "Email is valid!";
}
?>Настоящая мощь проявляется при перехвате вашего пользовательского исключения. Вместо того чтобы перехватывать общее Exception, вы можете перехватить ваше конкретное InvalidEmailException. Это позволяет вам обрабатывать различные типы ошибок разными способами, делая вашу обработку ошибок более целенаправленной и информативной.
<?php
try {
validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
echo "Email error: " . $e->getMessage();
}
?>Этот подход обеспечивает точный контроль над обработкой ошибок, позволяя по-разному реагировать на различные типы проблем в вашем приложении.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоВы получите три входных значения: строку имени пользователя, строку пароля и число, представляющее минимальную длину пароля. Имя пользователя не должно быть пустым, а пароль должен соответствовать требованию минимальной длины.
Создайте пользовательский класс исключения с именем InvalidCredentialsException, который расширяет базовый класс Exception.
Создайте функцию с именем validateCredentials, которая принимает три параметра: имя пользователя, пароль и минимальную длину. Внутри этой функции:
- Если имя пользователя пустое (пустая строка), выбросьте исключение
InvalidCredentialsExceptionс сообщением"Username cannot be empty" - Если длина пароля меньше минимальной длины, выбросьте исключение
InvalidCredentialsExceptionс сообщением"Password must be at least X characters long"(где X — значение минимальной длины) - Если обе проверки пройдены, выведите
"Credentials are valid"
Используйте блок try...catch для вызова функции с предоставленными входными данными. В блоке catch перехватите именно InvalidCredentialsException и выведите "Validation error: ", а затем сообщение об исключении, используя метод getMessage().
Формат входных данных:
- Первая строка: Строка, представляющая имя пользователя (например,
john_doeили пустая строка) - Вторая строка: Строка, представляющая пароль (например,
pass123) - Третья строка: Целое число, представляющее минимальную длину пароля (например,
8)
Ожидаемый вывод:
- Если учетные данные верны:
Credentials are valid - Если имя пользователя пустое:
Validation error: Username cannot be empty - Если пароль слишком короткий:
Validation error: Password must be at least X characters long(где X — минимальная длина)
Шпаргалка
Чтобы использовать пользовательские исключения, выбросьте экземпляр вашего пользовательского класса и перехватите этот конкретный тип исключения:
<?php
class InvalidEmailException extends Exception {}
function validateEmail($email) {
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new InvalidEmailException("Invalid email format: " . $email);
}
echo "Email is valid!";
}
try {
validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
echo "Email error: " . $e->getMessage();
}
?>Это позволяет обеспечить точную обработку ошибок путем перехвата конкретных типов исключений, а не общих объектов Exception.
Попробуйте сами
<?php
// Чтение входных данных
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$minLength = intval(fgets(STDIN));
// TODO: Напишите ваш код ниже
// 1. Создайте класс InvalidCredentialsException
// 2. Создайте функцию validateCredentials
// 3. Используйте блок 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'Итоги: Сортировка таблицы лидеров