抛出异常
本课属于 Coddy PHP 学习旅程的“逻辑与流程”单元。第 55 课,共 68 课。
有时,你需要发出信号,说明代码中出了问题,并停止正常执行。throw 关键字可以让你手动创建并抛出异常,从而控制程序何时以及为何应处理错误条件。
抛出异常时,你会创建一个新的 Exception 对象,并为它提供一条描述出错原因的信息。这个异常会立即停止当前代码的执行,并查找用于处理它的 catch 块。
<?php
function checkAge($age) {
if ($age < 0) {
throw new Exception("Age cannot be negative");
}
echo "Age is valid: " . $age;
}
try {
checkAge(-5);
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
?>throw 语句要求使用 new Exception() 语法,并传入一条描述问题的字符串消息。之后,你可以在 catch 代码块中使用 getMessage() 方法获取这条消息,这样更容易了解出了什么问题,并做出恰当的响应。
挑战
简单你会收到两个输入:一个表示价格的数字,以及一个表示折扣百分比的数字。两个输入都会以数字形式提供(价格可能是小数,折扣百分比是 0 到 100 之间的整数)。
读取两个输入,并创建一个名为 calculateFinalPrice 的函数,该函数接受两个参数:价格和折扣百分比。在此函数中,检查折扣百分比是否大于 100 或小于 0。如果其中任一条件成立,就抛出一个带有消息 "Invalid discount percentage" 的新 Exception。如果折扣有效,则计算应用折扣后的最终价格并返回。
使用 try...catch 块,传入提供的输入来调用该函数。在 try 块中,调用该函数并打印 "Final price: ",后面接计算出的最终价格。在 catch 块中处理异常,打印 "Error: ",后面接使用 getMessage() 方法获取的异常消息。
输入格式:
- 第一行:表示价格的数字(例如:
100或49.99) - 第二行:表示折扣百分比的整数(例如:
20或150)
预期输出:
- 如果折扣有效:输出
Final price:,后面接折扣后的计算价格 - 如果折扣无效:
Error: Invalid discount percentage
亲手试试
<?php
// 读取输入
$price = floatval(fgets(STDIN));
$discountPercentage = intval(fgets(STDIN));
// TODO: 在下面编写你的代码
// 创建 calculateFinalPrice 函数
// 使用 try...catch 块调用函数并处理异常
// 打印相应的输出
?>这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: PHP 在线编译器