Menu
CoddyTech

“finally”代码块

本课属于 Coddy PHP 学习旅程的“逻辑与流程”单元。第 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 块中,处理任何异常:使用 getMessage() 方法获取异常消息,并打印 "Error: ",后面跟着该消息。

在 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自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: PHP 在线编译器