Блок '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на новой строке
Попробуйте сами
<?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'Итоги: Сортировка таблицы лидеров