Блок 'finally'
Часть раздела Логика и управление потоком путешествия по PHP на Coddy — урок 54 из 68.
Иногда вам нужен код, который выполняется независимо от того, возникло исключение или нет. Блок finally дает такую гарантию — он содержит код, который всегда будет выполнен после завершения блока try...catch, что делает его идеальным для операций очистки, таких как закрытие файлов или соединений с базой данных.
Блок finally выполняется во всех сценариях: когда блок try завершается успешно без исключений, когда исключение выбрасывается и перехватывается, и даже когда исключение выбрасывается, но не перехватывается. Эта надежность делает его неоценимым для обеспечения того, чтобы важный код очистки выполнялся всегда.
<?php
try {
echo "Attempting operation...\n";
// Код, который может вызвать исключение
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
} finally {
echo "Cleanup completed.\n";
}
?>Блок finally выполняется после завершения работы обоих блоков try и catch, предоставляя единое место для необходимого кода очистки. Это гарантирует, что ваш скрипт правильно обрабатывает ресурсы и сохраняет чистое состояние, независимо от того, что происходит во время выполнения.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоВы получите два входных значения: тип операции и число. Первый ввод — это строка, которая будет либо "divide", либо "multiply". Второй ввод — это число, которое будет использоваться в операции.
Прочитайте оба входных значения и создайте блок try...catch...finally. Внутри блока try проверьте тип операции:
- Если операция —
"divide", проверьте, равно ли число нулю. Если оно равно нулю, выбросьте новое исключениеExceptionс сообщением"Cannot divide by zero". Если число не равно нулю, вычислите 100, деленное на это число, и выведите"Result: ", а затем результат. - Если операция —
"multiply", вычислите 100, умноженное на это число, и выведите"Result: ", а затем результат.
В блоке catch обработайте любое исключение, выведя "Error: ", а затем сообщение об исключении, используя метод getMessage().
В блоке finally выведите "Operation completed".
Формат входных данных:
- Первая строка: Строка с типом операции (либо
divide, либоmultiply) - Вторая строка: Число (например:
5,0или2.5)
Ожидаемый вывод:
- Если операция прошла успешно:
Result:, затем вычисленное значение, а затемOperation completedна новой строке - Если происходит деление на ноль:
Error: Cannot divide by zero, а затемOperation completedна новой строке
Шпаргалка
Блок finally содержит код, который всегда выполняется после завершения блока try...catch, независимо от того, возникло исключение или нет. Он идеально подходит для операций очистки, таких как закрытие файлов или соединений с базой данных.
Блок finally выполняется во всех сценариях:
- Когда блок
tryзавершается успешно без исключений - Когда исключение выброшено и поймано
- Когда исключение выброшено, но не поймано
<?php
try {
echo "Attempting operation...\n";
// Code that might throw an exception
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
} finally {
echo "Cleanup completed.\n";
}
?>Блок finally выполняется после завершения обоих блоков try и catch, гарантируя, что важный код очистки будет выполнен всегда.
Попробуйте сами
<?php
// Чтение входных данных
$operation = trim(fgets(STDIN));
$number = floatval(fgets(STDIN));
// TODO: Напишите ваш код ниже
// Создайте блок try...catch...finally для обработки операции
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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'Итоги: Сортировка таблицы лидеров