Menu
CoddyTech

Ném ngoại lệ

Thuộc phần Logic và luồng chương trình trong hành trình PHP của Coddy. Bài học 55 trên 68.

Đôi khi, bạn cần báo hiệu rằng đã có lỗi xảy ra trong code và dừng quá trình thực thi bình thường. Từ khóa throw cho phép bạn tự tạo và ném một ngoại lệ, giúp bạn kiểm soát thời điểm và lý do chương trình cần xử lý tình huống lỗi.

Khi ném một ngoại lệ, bạn tạo một đối tượng Exception mới và cung cấp cho nó một thông báo mô tả sự cố đã xảy ra. Ngoại lệ này sẽ lập tức dừng quá trình thực thi code hiện tại và tìm một khối catch để xử lý ngoại lệ đó.

<?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();
}
?>

Câu lệnh (statement) throw yêu cầu cú pháp (syntax) new Exception(), trong đó bạn truyền vào một thông báo dạng chuỗi (string) mô tả vấn đề. Sau đó, bạn có thể lấy thông báo này bằng phương thức (method) getMessage() trong khối catch, nhờ đó bạn dễ hiểu điều gì đã xảy ra và phản hồi phù hợp hơn.

challenge icon

Thử thách

Dễ

Bạn sẽ nhận hai đầu vào: một số biểu thị giá và một số biểu thị phần trăm giảm giá. Cả hai đầu vào đều là số, giá có thể là số thập phân, còn phần trăm giảm giá là số nguyên từ 0 đến 100.

Đọc cả hai đầu vào và tạo một hàm (function) có tên calculateFinalPrice, nhận hai tham số: giá và phần trăm giảm giá. Bên trong hàm này, kiểm tra xem phần trăm giảm giá có lớn hơn 100 hoặc nhỏ hơn 0 hay không. Nếu một trong hai điều kiện đúng, hãy ném một Exception mới với thông báo "Invalid discount percentage". Nếu mức giảm giá hợp lệ, hãy tính giá cuối cùng sau khi áp dụng giảm giá rồi trả về giá đó.

Dùng khối try...catch để gọi hàm bằng các đầu vào đã cho. Trong khối try, gọi hàm và in ra "Final price: ", theo sau là giá cuối cùng đã tính. Trong khối catch, xử lý ngoại lệ bằng cách in ra "Error: ", theo sau là thông báo ngoại lệ bằng phương thức getMessage().

Định dạng đầu vào:

  • Dòng đầu tiên: Một số biểu thị giá, ví dụ: 100 hoặc 49.99
  • Dòng thứ hai: Một số nguyên biểu thị phần trăm giảm giá, ví dụ: 20 hoặc 150

Đầu ra mong đợi:

  • Nếu mức giảm giá hợp lệ: Final price: , theo sau là giá đã tính sau khi giảm
  • Nếu mức giảm giá không hợp lệ: Error: Invalid discount percentage

Tự làm thử

<?php
// Đọc dữ liệu đầu vào
$price = floatval(fgets(STDIN));
$discountPercentage = intval(fgets(STDIN));

// TODO: Viết code bên dưới
// Tạo hàm calculateFinalPrice
// Dùng khối lệnh try...catch để gọi hàm và xử lý ngoại lệ
// In ra kết quả phù hợp

?>
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch PHP online