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

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

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

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

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

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

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

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 на новой строке

Шпаргалка

Блок 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 для обработки операции

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

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

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