Menu
Coddy logo textTech

Блок '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, предоставляя единое место для необходимого кода очистки. Это гарантирует, что ваш скрипт правильно обрабатывает ресурсы и сохраняет чистое состояние, независимо от того, что происходит во время выполнения.

challenge icon

Задание

Легко

Вы получите два входных значения: тип операции и число. Первый ввод — это строка, которая будет либо "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 для обработки операции

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

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

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